Python QStyledItemDelegate(PySide/PyQt/Qt)中createEditor的父级是什么?

Python QStyledItemDelegate(PySide/PyQt/Qt)中createEditor的父级是什么?,python,qt,pyqt,pyside,qstyleditemdelegate,Python,Qt,Pyqt,Pyside,Qstyleditemdelegate,我有一个QStandardItemModel的QTreeView。我正在使用自定义代理绘制/编辑数据。在createEditor方法中,我使用parent.window()来访问整个应用程序的主窗口(请参见下面链接到另一个问题中的一些代码) 问题:委托中createEditor的父级是什么?它由以下参数定义: def createEditor(self, parent, option, index) 令人困惑的是,当初始化QStyledItemDelegate时,我打印type(parent)

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

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

def createEditor(self, parent, option, index)
令人困惑的是,当初始化
QStyledItemDelegate
时,我打印
type(parent)
为此,我得到了树(我使该委托显示的树)。这就是我所期望的。但是,当我执行相同的操作并在
createEditor
方法实现中打印
type(parent)
时,它只返回
QWidget
。当我运行
parent.metaObject().className()
时,我得到了相同的结果,这是我从这里得到的建议:

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

我没有从以下方面找到太多帮助:

父参数(如果不是None)会导致self归Qt所有 而不是PyQt。从重新实施 QAbstractItemDelegate.createEditor()。返回用于编辑的小部件 索引指定用于编辑的项。父窗口小部件和样式 选项用于控制编辑器小部件的显示方式

注意:这一切都是从解决方案注释中讨论的不同问题的解决方案开始的:

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

在你的例子中:

def createEditor(自、父、选项、索引):
打印(父对象是父对象.window().tree.viewport())#真

嗯……这是违反直觉的!我想知道为什么用普通类型/元技巧来找到你正在使用的对象类型会如此困难……它害怕什么?@neuronet。我想是因为这是一个实现细节。我认为视口被设置为父对象,因为它是接收鼠标和键盘事件的小部件。当我问这个问题时,我陷入了深深的迷雾——我希望我知道
QProxyStyle