QToolBar中的下拉按钮,包含更改字段

时间:2015-05-31 23:43:37

标签: qt drop-down-menu menu qt4 qaction

根据放置在QAction QToolBar的{​​{1}}创建下拉按钮,我感到有些困惑 我有一个包含以下数据的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>  

NB:我不知道有多少字段组,以及我不知道按钮的数量。

所以,首先,我解析下面的xml文件并提取所需的数据。

对于每个button,我创建了自己的QAction并将其添加到现有工具栏中 稍后,我为每个按钮创建QMenu,并为每个组和字段填充QAction s。我QActionFirst fieldsfield1等等field2 然后,对于每个button我使用setMenu方法并在那里添加创建的菜单 如果我启动我的应用程序,我可以在工具栏中看到我的按钮,下拉菜单,它们看起来像我预期的那样。

这里的问题是我需要为这个按钮添加一些功能。

我想允许用户检查它们(我对所有setCheckable使用QActions)并取消选中。当用户使用组名检查操作时,将检查与该组相关的所有字段,依此类推。

由于我不知道启动时会有多少按钮和字段,因此很难处理信号和插槽 它迫使我使用QMap存储创建的QAction的所有地址,当来自此字段的信号被发出时,然后使用find方法查找发出它的操作,并且只有它们执行所需的操作。

问题是:有没有更好的方法来实现我的目标,或者我应该继续使用这种方法?

1 个答案:

答案 0 :(得分:2)

如果您不知道要创建多少项,我建议您使用QSignalMapper(文档here)。

首先,在QSignalMapper中使用变量引用每个项目,然后将所需信号(来自项目)连接到信号映射器。最后,将QSignalMapper连接到单个插槽,该插槽将接收参考变量。如果需要连接不同类型的信号,可以使用多个信号映射器。

你仍然必须在某处存放每件物品,但我认为这是要走的路。