モデル-ビュー-Qtのコントローラー
-
05-07-2019 - |
質問
MPVがどのように機能するかは多かれ少なかれ理解しています。 しかし、どのクラスを取得できません:
-
QAbstractItemModel
-
QAbstractItemView
-
QAbstractItemDelegate
/QItemDelegate
私のためにできますか?
それが関連する場合、私は使用しています
QGraphicsScene
/ QGraphicsView
には、相互作用ロジック(ゲームルール)が他のクラスにカプセル化されている間にユーザーが相互作用できるいくつかの要素(ゲームボードの視覚的表現)が含まれます。
解決
AbstractItemModel QAbstractItemView QAbstractItemDelegate
"モード/ビューフレームワーク"
これは、アプリケーションのデータ部分にとって非常に強力なフレームワークです。こちらは、フレームワーク。
QAbstractItemModel
は、 MVCのモデルの基本クラスです。データにアクセスしてデータを変更するためのグローバルインターフェイスを持ち、Observable部分を処理します。
QAbstractItemView
MVCのビューの基本クラスです。ビュー/選択部分のグローバルインターフェイスがあり、オブザーバー部分を処理します。オブザーバーパターンを心配する必要はありません。フレームワークが自動的に行います。
QAbstractItemDelegate
は、 MVCのコントローラーの基本クラスです。
ペイント、要素の編集などの戦略パターンです...
QGraphicsScene / QGraphicsView
&quot;グラフィックスビューフレームワーク&quot; から< strong>モデル/ビューフレームワークから独立しています。
これは、グラフィックス部分の非常に強力なフレームワークでもあります。
シーン
QGraphicsSceneはグラフィックスを提供します シーンを表示します。シーンには 次の責任:
の高速インターフェースを提供する 多数のアイテムを管理する 各アイテムへのイベントの伝播 選択などのアイテムの状態の管理 フォーカス処理 変換されていないレンダリング機能。 主に印刷用
ビュー
QGraphicsViewはビューを提供します コンテンツを視覚化するウィジェット シーンの。いくつか添付できます 同じシーンのビュー、提供する 同じデータへの複数のビューポート 設定
QGraphicsViewでモデルを表示する場合は、QAbstractItemViewに基づいて独自のビューを作成する必要があります。
QGraphicsViewをビューポートウィジェット QAbstractScrollArea :: setViewport(QWidget * widget))
として取得すると、
- 追加
QAbstractItemView :: rowsInserted
、 - 削除
QAbstractItemView :: rowsAboutToBeRemoved
- および変更
QAbstractItemView :: dataChanged
シーン内のアイテム。レイアウト変更イベントのリセットを処理することを忘れないでください。