我有一个QTreeView
QStandardItemModel
。我正在使用自定义委托绘制/编辑数据。在createEditor
方法中,我使用parent.window()
来访问整个应用程序的主窗口(请参阅下面的链接到另一个问题的一些代码)。
问题:委托中createEditor
的父级是什么?它由以下参数定义:
def createEditor(self, parent, option, index)
什么令人困惑的是,当QStyledItemDelegate
被初始化时,我打印type(parent)
那个,我得到了树(我已经让这个委托显示的树) )。这就是我的期望。但是,当我执行相同操作并在type(parent)
方法实现中打印createEditor
时,它只会返回QWidget
。当我运行parent.metaObject().className()
这是我从这里得到的建议时,我得到同样的结果:
QT : get the class name of an object
当我尝试提取我在树视图中定义的属性时,例如parent.rootItem
,我收到属性错误。那么,这里发生了什么?我的编辑的父母是什么?
我没有从PyQt documentation找到很多帮助:
父参数(如果不是None)会导致自己被Qt拥有 而不是PyQt。重新实现 QAbstractItemDelegate.createEditor()。返回用于编辑的小部件 索引指定的项目进行编辑。父窗口小部件和样式 选项用于控制编辑器小部件的显示方式
请注意,这一切都是通过对解决方案评论中讨论的不同问题的解决方案开始的:
答案 0 :(得分:3)
父级是使用委托的视图的viewport widget。视口是视图继承的scrollarea的一部分。
所以在你的特定例子中:
def createEditor(self, parent, option, index):
print(parent is parent.window().tree.viewport()) # True