【问题标题】:What is the parent of createEditor in a QStyledItemDelegate (PySide/PyQt/Qt)?QStyledItemDelegate (PySide/PyQt/Qt) 中 createEditor 的父级是什么?
【发布时间】:2016-01-01 12:19:54
【问题描述】:

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

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

def createEditor(self, parent, option, index)

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

QT : get the class name of an object

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

PyQt documentation 没有太多帮助:

parent 参数,如果不是 None,则导致 self 归 Qt 所有 而不是 PyQt。从重新实现 QAbstractItemDelegate.createEditor()。返回用于编辑的小部件 index 指定的项目进行编辑。父小部件和样式 选项用于控制编辑器小部件的显示方式

请注意,这一切都是由解决此处 cmets 中讨论的不同问题的解决方案开始的:

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

【问题讨论】:

  • 老天,当我问这个问题时,我陷入了困境——我希望我知道QProxyStyle

标签: python qt pyqt pyside qstyleditemdelegate


【解决方案1】:

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

所以在你的具体例子中:

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

【讨论】:

  • 嗯....这是违反直觉的!我想知道为什么使用普通类型/元技巧来查找您正在使用的对象类型很难找到它......它害怕什么?
  • @neuronet。我想是因为它是一个实现细节。我认为视口被设置为父级,因为那是接收鼠标和键盘事件的小部件
猜你喜欢
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2015-08-01
  • 2022-01-15
相关资源
最近更新 更多