使用 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 mousePressEvent 阻碍了 QAction 切换