[英]What is the parent of createEditor in a QStyledItemDelegate (PySide/PyQt/Qt)?
我有一个QStandardItemModel
的QTreeView
。 我正在使用自定义委托绘画/编辑数据。 在createEditor
方法中,我使用parent.window()
访问整个应用程序的主窗口(请参见下面的链接,以链接到另一个问题的某些代码)。
问题:委托中createEditor
的父级是什么? 它使用以下参数定义:
def createEditor(self, parent, option, index)
当什么是混乱是QStyledItemDelegate
被初始化,并且我打印type(parent)
对于这一点 ,我得到的树回来(即我做这个代理,显示树)。 这就是我的期望。 但是,当我执行同样的操作并在createEditor
方法实现中打印type(parent)
,它仅返回QWidget
。 当我运行parent.metaObject().className()
,我得到的是相同的建议:
当我尝试提取在树状视图中定义的属性时,例如parent.rootItem
,出现属性错误。 那么,这是怎么回事? 我的编辑的父母是谁?
我从PyQt文档中找不到很多帮助:
父参数(如果不是None)将导致自己归Qt而非PyQt所有。 从QAbstractItemDelegate.createEditor()重新实现。 返回用于编辑索引指定的项目的窗口小部件以进行编辑。 父窗口小部件和样式选项用于控制编辑器窗口小部件的显示方式
请注意,所有这些都是从解决另一个问题的解决方案开始的,该解决方案的注释在此处讨论:
父级是使用委托的视图的视口小部件 。 视口是视图继承的滚动区域的一部分。
因此,在您的特定示例中:
def createEditor(self, parent, option, index):
print(parent is parent.window().tree.viewport()) # True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.