如果选中了该菜单中的任何可检查的 QActions,则正在检查带菜单的 QToolButton



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

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

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

1:更简单的方法是简单地增加一些成员,以跟踪该QToolButton下已启用的QActions数量。 检查 QAction 时递增。 取消选中时递减它。 如果该计数器> 0,请检查您的 QToolButton。 如果为 0,请取消选中它。 这意味着您的插槽需要知道状态,您可以通过将 sender() 强制转换为插槽中的 QAction* 来完成。

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