【问题标题】:How to gray out a menu item in Qt如何在 Qt 中使菜单项变灰
【发布时间】:2012-03-19 09:08:59
【问题描述】:

我正在使用 C++ 在 Qt 中构建一个带有菜单栏 (menuBar) 的小程序,我想知道在激活某个变量时如何使菜单项变灰(例如禁用)。有可能吗?

【问题讨论】:

    标签: c++ qt menu


    【解决方案1】:

    寻找动作的索引不一定方便。如果您已经使用 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。
    【解决方案2】:

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

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

    附:如下所示,setEnabled(bool)setDisabled(bool) 是插槽(toggle() 也是如此),因此它们可以连接到指示需要更改操作可用性的信号。

    【讨论】:

    • 您可以在答案中添加 setEnabled(bool)setDisabled(bool) 是插槽(toggle() 也是如此),因此它们可以连接到指示需要更改操作可用性的信号.
    • 如果变量更改频繁(比菜单显示的频率更高),明智的做法是仅在响应signal: QMenu::aboutToShow() 时切换它;无论如何改变不可见的东西是没有意义的。
    • 哈哈哈,我必须确保我没有抓住分隔符......哈哈
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2012-03-09
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多