使用 QMenu 检查 QToolButton

Posted

技术标签:

【中文标题】使用 QMenu 检查 QToolButton【英文标题】:making a QToolButton checked with a QMenu 【发布时间】:2012-04-04 18:56:01 【问题描述】:

我正在设计一个带有按钮网格的小部件。单击时,我希望这些按钮向用户提供 3 个可供他们选择的选项(最好是在一个小的下拉菜单中)。当他们选择 3 个选项中的 1 个时,我希望选择该按钮(即保持按下状态)。我希望与 3 个选项中的每一个相关联的 QAction 能够知道单击了哪个按钮,以便我可以记录单击了网格中的哪个按钮。网格中的每个按钮都需要是独占的,并且在被选中时。提供的 3 个选项对于所有按钮都是相同的。

我首先从 QGridLayout 中的 QButtonGroup 和 QPushButtons 开始。我能够让按钮按我的意愿独占。当我将按钮从 QPushButton 更改为 QToolButton,并添加一个下拉菜单时,发生了两件事:

当他们从菜单中选择一个项目时,按钮不会像我想要的那样保持按下状态。 我似乎看不到通知菜单操作选择哪个按钮的方法,因此我无法记录选择了哪个按钮。

对如何实现我正在寻找的功能有什么想法吗?

编辑:

几个澄清点:

m x n 网格中的每个按钮都代表一个人。 每个按钮上的下拉列表可让您选择此人当前正在执行的操作。 一次只能有一个人做某事。因此,一次只能按下整个网格中的一个按钮。 按钮下拉菜单中的项目在被选中时应该变为选中状态,并且这些项目需要是独占的,所以如果一个按钮被点击两次,下拉菜单中一个新的选中菜单项应该取消前一个选中的菜单项一。 当按钮下拉菜单中的项目被选中时,菜单应该消失并且按钮应该被按下。 我需要记录单击的按钮(即行和列)以及从按钮下拉菜单中选择的选项。因此,菜单项信号/插槽需要以某种方式知道单击了哪个按钮。但是,QToolButton::setMenu() 不会将菜单的所有权转移给 QToolButton,所以我不确定如何让 QMenu 的 QActions 中的信号/插槽知道选择了哪个按钮。

【问题讨论】:

【参考方案1】:

QObject::sender 会告诉你 QObject 发出了什么信号

【讨论】:

以上是关于使用 QMenu 检查 QToolButton的主要内容,如果未能解决你的问题,请参考以下文章

防止 QMenu 在其 QAction 之一被触发时关闭

QMenu mousePressEvent 阻碍了 QAction 切换

QMenu 中 QAction 的所有权

如何在 Qt Designer 中删除 QMenu 分隔符?

Qt QAction 动态数组连接

为啥 QToolTips 不会出现在 QMenu 中的 QActions 上