根据放置在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。我QAction
,First fields
,field1
等等field2
然后,对于每个button
我使用setMenu
方法并在那里添加创建的菜单
如果我启动我的应用程序,我可以在工具栏中看到我的按钮,下拉菜单,它们看起来像我预期的那样。
这里的问题是我需要为这个按钮添加一些功能。
我想允许用户检查它们(我对所有setCheckable
使用QActions
)并取消选中。当用户使用组名检查操作时,将检查与该组相关的所有字段,依此类推。
由于我不知道启动时会有多少按钮和字段,因此很难处理信号和插槽
它迫使我使用QMap
存储创建的QAction
的所有地址,当来自此字段的信号被发出时,然后使用find方法查找发出它的操作,并且只有它们执行所需的操作。
问题是:有没有更好的方法来实现我的目标,或者我应该继续使用这种方法?
答案 0 :(得分:2)
如果您不知道要创建多少项,我建议您使用QSignalMapper(文档here)。
首先,在QSignalMapper中使用变量引用每个项目,然后将所需信号(来自项目)连接到信号映射器。最后,将QSignalMapper连接到单个插槽,该插槽将接收参考变量。如果需要连接不同类型的信号,可以使用多个信号映射器。
你仍然必须在某处存放每件物品,但我认为这是要走的路。