3

我有QTreeView一个QStandardItemModel。我正在使用自定义委托绘制/编辑数据。在createEditor方法中,我parent.window()用来访问整个应用程序的主窗口(见下文链接到另一个问题的一些代码)。

问题:createEditor委托中的父母是什么?它使用以下参数定义:

def createEditor(self, parent, option, index)

令人困惑的是什么时候QStyledItemDelegate初始化,然后我打印出来type(parent),我得到了树(我让这个委托显示的树)。这是我所期望的。但是,当我在方法实现中执行相同操作并打印时,它只会返回. 当我跑步时,我得到了同样的结果,这是我从这里得到的建议:type(parent)createEditorQWidgetparent.metaObject().className()

QT:获取对象的类名

当我尝试提取在树视图中定义的属性时,例如parent.rootItem,出现属性错误。那么,这里发生了什么?我的编辑器的父级是什么?

我没有从PyQt 文档中找到太多帮助:

parent 参数,如果不是 None,将导致 self 由 Qt 而不是 PyQt 拥有。从 QAbstractItemDelegate.createEditor() 重新实现。返回用于编辑由 index 指定的项目进行编辑的小部件。父小部件和样式选项用于控制编辑器小部件的显示方式

请注意,这一切都是由对此处解决方案的评论中讨论的不同问题的解决方案开始的:

https://stackoverflow.com/a/32928091/1886357

4

1 回答 1

3

父级是使用委托的视图的视口小部件。视口是视图继承的滚动区域的一部分。

因此,在您的特定示例中:

    def createEditor(self, parent, option, index):
        print(parent is parent.window().tree.viewport()) # True
于 2015-10-04T22:50:52.570 回答