我有一個QTreeView
的QStandardItemModel
。我正在使用自定義代理繪製/編輯數據。在createEditor
方法中,我使用parent.window()
來訪問整個應用程序的主窗口(參見下面鏈接到另一個問題的一些代碼)。QStyledItemDelegate(PySide/PyQt/Qt)中createEditor的父級是什麼?
問題:代表中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太大的幫助:
父的說法,如果不是無,導致自我被Qt 而不是PyQt的擁有。從 重新實現QAbstractItemDelegate.createEditor()。返回編輯 由索引指定的項目以進行編輯的小部件。父控件和樣式 選項用來控制編輯器部件的顯示
注意這是所有的解決方案開始在意見解決這裏討論不同的問題:
https://stackoverflow.com/a/32928091/1886357
嗯....這是違反直覺的!我想知道爲什麼使用正常的類型/元技巧找出你正在使用的對象類型是如此困難....它有什麼害怕的? – neuronet
@neuronet。我想是因爲它是一個實現細節。我認爲視口被設置爲父窗口,因爲那是接收鼠標和鍵盤事件的窗口部件 – ekhumoro