1

QAction配置に基づいてドロップダウンボタンを作成することに少し行き詰まっていQToolBar
ます。次のデータを含むXMLファイルがあります。

<cfg>
<fields>
  <group name="First fields">
    <field>filed1</field>
    <field>filed2</field>
    <field>filed3</field>
  </group>
  <group name="Second fields">
    <field>filed4</field>
    <field>filed5</field>
    <field>filed6</field>
      ... etc ...
  </group>
</fields>
<button name="MyButton1" />
<button name="MyButton2 />
      ... etc ...
</cfg>  

注:フィールド グループがどのくらいになるかはわかりません。また、ボタンがどのくらいになるかもわかりません。

まず、次の xml ファイルを解析して、必要なデータを抽出します。

それぞれについてbutton独自のものを作成QActionし、既存のツールバーに追加します。
後で、QMenuボタンごとに作成し、QActionグループとフィールドごとに s を入力します。QActionfor First fieldsfield1field2などがあります。次に
、それぞれbuttonにメソッドを使用setMenuして、作成したメニューをそこに追加します。
アプリを起動すると、ドロップダウン メニューのあるツールバーにボタンが表示され、期待どおりに表示されます。

ここでの問題は、このボタンにいくつかの機能を追加する必要があることです。

ユーザーがそれらをチェックできるようにしたいと思います(私setCheckableはすべてに使用しますQActions)とチェックを外します。ユーザーがグループ名でアクションをチェックすると、このグループに関連するすべてのフィールドがチェックされます。

起動時にどれだけのボタンとフィールドがあるかわからないので、シグナルとスロットの操作が難しくなります。このフィールドからのシグナルが発行されたときに、 created のすべてのアドレスを格納
するために使用する必要があり、次に find メソッドを使用してそれを発行したアクションを探し、それらだけが必要なアクションを実行します。 QMapQAction

問題は、私の目標を達成するためのより良い方法はありますか、それともこのアプローチを引き続き使用する必要があるかということです。

4

1 に答える 1

2

作成されるアイテムの数がわからない場合は、QSignalMapper (ドキュメントはこちら) を使用することをお勧めします。

まず、QSignalMapper 内の変数を使用して各アイテムを参照し、次に必要な (アイテムからの) シグナルをシグナル マッパーに接続します。最後に、参照変数を受け取る単一のスロットに QSignalMapper を接続します。異なる種類の信号を接続する必要がある場合は、いくつかの信号マッパーを使用できます。

確かに各アイテムをどこかに保管する必要がありますが、これが進むべき道だと思います。

于 2015-06-01T06:37:08.090 に答える