0

Qtでの作業を再開しました。私たちがやりたいのは、グラフィカルユーザーインターフェイスを自動的に生成することです。そのため、.uiファイル形式(XMLベースのファイル形式)を詳しく調べました。これらのファイルはQtDesignerによって生成されますが、他のソフトウェアによって簡単に作成できます。この部分はこれまでのところ機能します。

ただし、カスタムウィジェットをいくつか追加したいと思います。カスタムウィジェットの作成もそれほど難しくありません。いくつかの優れたWebサイトが存在します:Qt Designer用のカスタムウィジェットの作成、Qt Designerでのカスタムウィジェットの使用、(より多くのハイパーリンクが抑制されています)、...

私の質問はむしろ、カスタムアイテムを表示するカスタムウィジェットをどのように実装できるかということです。一例を挙げましょう。QComboBoxとQSpinBoxがあります。コンボボックスには3つのアイテムがあります

  • A
  • B
  • C。

「A」を選択するとき、スピンボックスの最小値を1に設定し、最大値を9に設定します。「B」を選択する場合、スピンボックスの最小値を10に設定し、最大値を99に設定する必要があります。「C」を選択すると、スピンボックスの最小値が100に、最大値が999に設定されます。これはどのように正しく行われますか?

現時点では、ヘルパークラスであるQTableWidgetにデータを設定しています。各行には3つの列/セルがあります。

item |  min | max
-----+------+-----
  A  |   0  |   9
  B  |  10  |  99
  C  | 100  | 999

そして、QComboBoxとQSpinBoxを含むカスタムウィジェットがあります。実行時に、カスタムウィジェットにQTableWidgetからデータ/モデルを取得し、setFriendContainer()と呼ばれるメソッドによってそれ自体にコピーするように指示します[自動的に発行されるテーブルウィジェットからの信号に接続する必要があるパブリックスロットです]。その後、テーブルウィジェットはもう必要ありません!私はそれをユーザーにまったく見せたくありません(これがいくつかのサイズプロパティが0に設定されている理由ですが、部分的にはまだ表示されています)。

これは実際にそれを実装するためのクリーンな方法ではないと思います。何が良い/代替案ですか?アイテムも生成され、同じ.uiファイルに含まれている必要があります。もちろん、実行時に別のファイルからロードすることは可能ですが、これはむしろオプションではないと思います。私の回避策は大丈夫だと思いますか、それとも「醜い」ですか?単一のカスタムプロパティを追加する方法を確認できる例がいくつかありますが、これは別のことだと思います。コンテナ全体(アイテムのリストやテーブルなど)を追加する場合です。しかし、それを.uiファイルに含めることは、モデル/ビューの概念全体に反する可能性さえありますか?!

どんな助けでも歓迎します!

ありがとう、マティアス

4

2 に答える 2

1

XML形式のカスタムプロパティにデータを追加しました。データには、ウィジェットで使用されるいくつかのコーディング情報が格納されます。動的プロパティを持つのは良いことです。

于 2012-08-31T07:12:20.493 に答える
0

ウィジェットのプロパティを扱っていることを忘れないでください。UIファイルは、ウィジェット、それらのプロパティ、および階層内でのそれらの相互関係の説明にすぎません。カスタムウィジェットは、QPushButtonやQComboBoxtoDesignerのようなものと同じです。重要なことは、UIファイルで理解できる方法でカスタムウィジェットのプロパティをエンコードすることです。

おそらく、UIスキーマを調べて、ウィジェットが有効なファイルに記述されていることを確認するのが最適です。その後、プロパティが正しく動作することを確認するだけです(つまり、プロパティを任意の順序で設定して同じ結果を得ることができます)。ウィジェットをどのように実装するかは、実際にはあなた次第です(独自のデータ構造を作成し、「非表示」のツリーウィジェットをドラッグしないでください)。

于 2012-08-27T14:02:11.883 に答える