2017-08-22 9 views
-1

PyQtでモデル化/表示するのが初めてで、QAbstractItemModelクラスから継承するオブジェクトの作成に問題があります。ここではそれを継承するクラスです: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'を使用する理由は何ですか?さらに重要なのは、なぜあなたは1つのアイテムごとに新しいアイテムモデルを作成するのでしょうか? 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

これは、回答ではなくコメントとして適切な場合があります。

あなたはMyCustomDataModelにMyCustomTypeインスタンスを渡す行を更新してみてください。

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から継承する新しいクラスを作成し、メンバープロパティを1つ追加するか、または2つ追加することで拡張するという単純なことのようです。この新しいクラスのオブジェクトをQListWidgetItemから継承する別のクラスに配置する行為は、それを破るだろうということをどのように事前に知っていますか? – LKeene

関連する問題