2017-08-22 50 views
-1

我是新來的模型/視圖在PyQt中,我無法創建從Q​​AbstractItemModel類繼承的對象。下面是從它繼承的類:無法繼承QAbstractItemModel

class MyCustomDataModel(QAbstractItemModel): 

    def __init(self, parent = None): 
     super(MyCustomDataModel, self).__init__(parent) 

     self.parent = parent 

下面是嘗試實例上述類型的一個對象的另一個類:

class MyCustomType(AnotherCustomTypeThatInheritsQListWidgetItem): 

    def __init__(self, parent = None): 
     super(MyCustomType, self).__init__(parent) 

     # Instantiate a model: 
     self.dataModel = MyCustomDataModel(self) 

上述實例是在運行時投擲以下錯誤: 「化QAbstractItemModel (QObject parent = None):參數1具有意外的類型'MyCustomType'「我看不出問題在這裏,但我對Python/PyQt很新穎。有人能指出我做錯了什麼嗎?我試過調用實例化行,並沒有傳入任何東西,但我得到了同樣的錯誤。

+0

一些嘗試似乎錯誤影響了,如果封裝對象具有QListWidgetItem後繼承鏈中的任何地方。不知道如何從這裏開始。建議任何人? – LKeene

+1

爲什麼你會在自定義項目模型中使用'QListWidgetItem'?更重要的是,爲什麼你會爲每一件物品創建一個新的物品模型?如果你是pyqt的新手,我建議你使用[QStandardItemModel](https://doc.qt.io/qt-4.8/qstandarditemmodel.html)。 – ekhumoro

+0

錯誤消息告訴你一些有關錯誤的信息。很明顯,QAbstractItemModel的構造函數不喜歡你給它的東西。有時間查看文檔以查看實際需要的內容。查看Qt類文檔通常非常有幫助:http://doc.qt.io/qt-5/classes.html – Trilarion

回答

1

這可能更適合作爲評論而不是答案。

嘗試更新,你通過MyCustomType實例MyCustomDataModel行:

self.dataModel = MyCustomDataModel(self) 

而是使用:

self.dataModel = MyCustomDataModel() 
+0

謝謝,這工作......至少,錯誤消失了。但我不明白我的錯誤。如果我希望在實例化過程中將父項分配給MyCustomDataModel,該怎麼辦? – LKeene

+0

將'MyCustomType'實例傳遞給'super(MyCustomDataModel,self).__ init __(parent)''中的'QAbstractItemModel'時出現錯誤。 'QAbstractItemModel'是一個不接受你創建的自定義對象的對象。如果你要繼承'QAbstractItemModel',那麼你需要構造'MyCustomType'作爲可接受的對象(即繼承'QAbstractItemModel'所期望的類)。我想這可能有助於理解你爲什麼要用'QAbstractItemModel'和'AnotherCustomTypeThatInheritsQListWidgetItem'來設置繼承。 – HodgePodge

+0

這似乎是一個簡單的事情,即創建一個從QAbstractItemModel繼承的新類,並通過添加一個或兩個成員屬性來擴展它。如何預先知道將這個新類的對象放在從QListWidgetItem繼承的另一個類中會破壞它的行爲? – LKeene