QStyledItemDelegate (PySide/PyQt/Qt) 中 createEditor 的父级是什么?
What is the parent of createEditor in a QStyledItemDelegate (PySide/PyQt/Qt)?
我有一个 QTreeView
个 QStandardItemModel
。我是 painting/editing 使用自定义委托的数据。在 createEditor
方法中,我使用 parent.window()
来访问整个应用程序的主要 window(请参阅下面的 link 来自另一个问题的一些代码)。
问题:委托中createEditor
的父级是什么?它使用以下参数定义:
def createEditor(self, parent, option, index)
令人困惑的是当 QStyledItemDelegate
初始化时,我为 that 打印 type(parent)
,我得到了树(我拥有的树使这个委托显示)。这是我所期望的。然而,当我做同样的事情并在 createEditor
方法实现中打印 type(parent)
时,它只是 returns QWidget
。当我 运行 parent.metaObject().className()
时我得到了同样的结果,这是我从这里得到的建议:
QT : get the class name of an object
当我尝试拉取我在树视图中定义的属性时,例如 parent.rootItem
,我收到属性错误。那么,这是怎么回事?我的编辑器的父级是什么?
我没有从 PyQt documentation 那里找到太多帮助:
The parent argument, if not None, causes self to be owned by Qt
instead of PyQt. Reimplemented from
QAbstractItemDelegate.createEditor(). Returns the widget used to edit
the item specified by index for editing. The parent widget and style
option are used to control how the editor widget appears
请注意,这一切都是从对此处解决方案的评论中讨论的不同问题的解决方案开始的:
父级是使用委托的视图的 viewport widget。视口是视图继承的滚动区域的一部分。
因此在您的特定示例中:
def createEditor(self, parent, option, index):
print(parent is parent.window().tree.viewport()) # True
我有一个 QTreeView
个 QStandardItemModel
。我是 painting/editing 使用自定义委托的数据。在 createEditor
方法中,我使用 parent.window()
来访问整个应用程序的主要 window(请参阅下面的 link 来自另一个问题的一些代码)。
问题:委托中createEditor
的父级是什么?它使用以下参数定义:
def createEditor(self, parent, option, index)
令人困惑的是当 QStyledItemDelegate
初始化时,我为 that 打印 type(parent)
,我得到了树(我拥有的树使这个委托显示)。这是我所期望的。然而,当我做同样的事情并在 createEditor
方法实现中打印 type(parent)
时,它只是 returns QWidget
。当我 运行 parent.metaObject().className()
时我得到了同样的结果,这是我从这里得到的建议:
QT : get the class name of an object
当我尝试拉取我在树视图中定义的属性时,例如 parent.rootItem
,我收到属性错误。那么,这是怎么回事?我的编辑器的父级是什么?
我没有从 PyQt documentation 那里找到太多帮助:
The parent argument, if not None, causes self to be owned by Qt instead of PyQt. Reimplemented from QAbstractItemDelegate.createEditor(). Returns the widget used to edit the item specified by index for editing. The parent widget and style option are used to control how the editor widget appears
请注意,这一切都是从对此处解决方案的评论中讨论的不同问题的解决方案开始的:
父级是使用委托的视图的 viewport widget。视口是视图继承的滚动区域的一部分。
因此在您的特定示例中:
def createEditor(self, parent, option, index):
print(parent is parent.window().tree.viewport()) # True