如果检查了菜单中的任何可检查QAction,则检查QToolButton w / Menu

时间:2015-03-09 12:23:03

标签: qt qmenu qaction qactiongroup qtoolbutton

假设我有一个带有延迟动作的QToolButton显示菜单。所述菜单包含许多可检查的动作。在这种特殊情况下,它是一个激活缩放工具的按钮,有3个缩放模式QActions可用,在QActionGroup中组织。

如果正在检查菜单中的任何可检查操作,我希望检查该工具按钮。我怎样才能以简洁和Qt惯用的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

我没有使用QToolButton,但是我做了一些伏都教,而QAction的状态从不同的地方改变了。每次调用QAction :: toggled()时,连接的插槽都需要执行检查。我认为有两种方法可以做到这一点。

1:更简单的方法是简单地增加一些跟踪QToolButton下QActions数量的成员。检查QAction时递增。当它们未经检查时减少它。如果该计数器是> 0,检查你的QToolButton。如果它为0,则取消选中它。这意味着你的插槽需要知道状态,你可以通过在插槽中将sender()转换为QAction *来实现。

2:如果你有QAction到QToolButton的某种类型的映射,你可以在每次调用插槽时迭代它们。对我来说,这似乎是一种天真的方法,而且在这种情况下更容易跟上。我有时必须根据触发的另一个QAction将QAction添加到QMenu,所以我已经有了类似的映射位置。