3

だから私はC++で数独ゲームを書いています。私はほとんどのゲームロジックを実行してテストしましたが、GUI用にその上にQtを使用したいと思いました。私は自分のニーズに合わせてQtクラスを操作するための最良の方法を見つけようとしていました。

テストとして、QAbstractTableModelを試してみました。サブクラス化して、既存のデータモデルと既存のコントローラーにアクセスさせました。今のところ、私はQTableViewを使用して、数独ボードの基本的なレンダリングと基本的な「編集」を取得しています(任意の値を変更できます)。それは私が望むもののようには見えませんが、機能はすべてそこにあります(または追加することができます)。

フレームワークに依存せずに、すべてC++で変更するデータモデルとコントローラーを作成したかったのです。それから私はQtを上に座らせたかったのです。だから私はこれを機能させています、そしてここにこれらのものが高レベルでどのように通信するかについての簡単な「図」があります

QTableView?
    ^
    |
    v
PuzzleModel : QAbstractTableModel
             ^              |
             |              |_____________
             |                            v
Real data model classes <------------ Controllers

私の質問は、QTableViewを変更するにはどうすればよいですか、またはデータを希望どおりに表示するために独自のビューまたはQWidgetを作成する必要がありますか?

理想的には、固定サイズのテーブル(ヘッダーなし、サイズ変更なし)を表示し、複数選択を禁止したいと思います。さまざまなフォントスタイル/色のレンダリング方法にいくつかのカスタマイズがありますが、それはかなり簡単に処理できると思います。また、各セルを数値として、または「マーク」の場合は次のようにレンダリングしたいと思います。

*-------------*         *-------------*
|  1   2   3  |         |   ******    |
|  4       6  |         |        *    |
|      8   9  |         |        *    |
*-------------*         *-------------*

したがって、QTableViewをそのまま使用し続けることはできません。独自のQStyledItemDelegateを作成し、それでもQTableViewを使用しますか?ウィジェット全体を作成する必要がありますか?私が作成した場合

さまざまなQtクラスの機能を知っている人からのアドバイス/指示を探しているだけです。

4

1 に答える 1

4

2つのオプションがあります。

  1. セルとサブクラスを引き続き使用QTableViewして、セルを希望どおりにレンダリングします。ただし、セル間のペイントをそのように変更することはできません。QAbstractTableModelQStyledItemDelegate

    ただし、Qt::ItemDataRoleモデルのdata()実装からより多くのsに反応することで、必要な多くのこと(フォント、色)を実現できることに注意してください。

  2. カスタムウィジェットを作成し、カスタムデータプロバイダーインターフェイスを使用しますQAbstractTableModel強調しておきますが、独自のを実装するときは、使い続けないでくださいSudokuWidget。その方法は誰にとってもはるかに簡単です(QAbstractItemModelアイテムビューの場合、一般的なデータプロバイダーインターフェイスとして役立つには、抽象的すぎて特殊すぎます)。

私のアドバイスは(2)で行くことです。インタビューは過大評価されています。

于 2011-04-30T16:50:50.320 に答える