如何在Qt中使菜单项变灰?

14

我正在使用C++和Qt的菜单栏(menuBar)构建一个小程序,我想知道如何在特定变量被激活时使菜单项变灰(例如禁用)。这是否可能?

2个回答

18

如果您知道相应QAction的索引:

QMenu::actions.at(i).setEnabled(false);

顺便提一下,如下所示,setEnabled(bool)setDisabled(bool)是槽函数(toggle()也是),因此它们可以连接到一个信号,表示需要更改操作的可用性。


2
你可以在回答中补充说明 setEnabled(bool)setDisabled(bool) 是槽函数(toggle() 也是),因此它们可以连接到一个信号,指示需要更改操作的可用性。 - Luc Touraille
3
如果变量频繁更改(比菜单显示更频繁),则最好只在接收到“signal: QMenu::aboutToShow()”信号时切换变量;因为对于不可见的内容进行更改是没有意义的。 - MSalters
2
哈哈哈,我得确保我没有抓取分隔符... 哈哈 - Chef Pharaoh

5
寻找操作的索引并不一定方便。如果您使用QtCreator的表单编辑器构建了界面,则每个菜单项都会有一个操作。它们的名称基于您首先为操作提供的文本。例如,如果您以交互方式输入标题为 Foo Bar 的菜单项,则会为您创建名为actionFoo_Bar的操作。只需在代码编辑器中键入ui->action,观察QtCreator将提供什么“名称完成”。

在这种情况下,我会考虑这样的调用:

ui->actionFoo_Bar.setEnabled(false);

您甚至可以使用以下代码隐藏菜单项:
ui->actionFoo_Bar.setVisible(false);

我的操作在 ui->ui->mainToolBar 下都没有出现(它应该出现在 UI 上)。它应该放在哪里?我正在 Debian 10 上使用 Qt Creator 4.8.2。 - Rodrigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接