私はマッピングアプリケーションに取り組んでおり、テーブル、フォームを使用して、マップ内のグラフィックオブジェクトとしてデータオブジェクトを表示する必要があります。私はPyQtを使用していますが、これはPythonの質問ではなくQtの質問であるため、それほど重要ではありません。
テーブルビューとフォームビューだけが必要な場合、これは簡単ですが、Qt Model/Viewフレームワークを使用するだけです。ただし、グラフィックスビューフレームワークを使用してのみ実際に利用できる機能を提供するには、マップビューが必要です。これは、基本的に、QGraphicsSceneがデータモデルとして機能する独自のモデル/ビューフレームワークです。
これを行うには2つの方法が考えられます。1つは、QAbstractItemModelからサブクラス化された信頼できるモデルから始めて、それをQAbstractItemViewのサブクラスにリンクし、そこからシーン内のQGraphicsItemsを生成および更新することです。QGraphicsItemsとの相互作用を通じて、データアイテムとのユーザーの相互作用と変更を処理する方法がわからないため、これは見苦しいように見えます。
私が考えるもう1つの方法は、QGraphicsSceneを信頼できるデータソースとして扱い、データオブジェクトを各QGraphicsItemの.data()プロパティに格納することです。次に、QAbstractItemModelをサブクラス化し、データストアとしてシーン内のデータにアクセスするように記述します。その後、他のビューはこれをモデルとして使用します。シーン内のデータへの変更をモデルまでどのように伝播しますか?
どちらのアプローチを採用しても、フレームワークでは処理できないギャップがあるようです。モデル/ビューでは、すべての変更がモデルで行われると想定されます。グラフィックビューでは、すべての変更がシーンで行われたと見なされます。
したがって、QAbstractItemModel(authoritative)-> QAbstractItemView-> QGraphicsSceneを選択するか、QGraphicsScene(authoritative)-> QAbstractItemModel->OtherViewsを選択します。なぜあなたはどちらか一方を選ぶのでしょうか、そしてあなたはどんな落とし穴を予想しますか?Qtのツインモデル/ビューフレームワーク間のこのギャップを埋める必要がある人は他にいますか?それをどのように行いましたか?