我有一个QTreeViewQStandardItemModel。我正在使用自定义委托绘画/编辑数据。在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()。返回用于编辑的小部件
  索引指定要编辑的项目。父小部件和样式
  选项用于控制编辑器小部件的显示方式


请注意,所有这些都是从解决此问题的注释中讨论的另一个问题开始的:

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

最佳答案

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

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

    def createEditor(self, parent, option, index):
        print(parent is parent.window().tree.viewport()) # True

关于python - QStyledItemDelegate(PySide/PyQt/Qt)中createEditor的父级是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32938507/

10-09 19:08