无法隐藏QMenu对象QMenu :: setVisible()?

12

我在应用程序的主窗口上建立了一个QMenu MainMenu。正如大家习惯的那样,我有以下QMenu主菜单:

文件 - 编辑 - 超级重型专家菜单 - 设置 - 帮助

因为超级重型专家菜单包含很多设置,可能会困惑初学者用户,所以我希望在程序启动时最初隐藏这个子树SuperHeaverExpertMenus

例如,当设置中的复选框为真时,我想显示带有SuperHeavyExpertMenu的子树。

我可以通过QAction:setVisible(false)隐藏上面QMenu的子项QActions,但是我能为QMenu做到这一点吗?

有没有一种方法可以隐藏QMenu呢?


1
隐藏菜单操作 - Amartel
@Amartel 我看不到任何可能隐藏QMenu的方式?我对QActions不感兴趣。我已经能够隐藏QActions。但是QMenu仍然可见于主菜单中。我想隐藏一个QMenu。 - Ralf Wickum
在这种情况下,“action”一词只是指“可以放入菜单中的东西”。从QMenu描述中可以看出:“有四种类型的操作项:分隔符、显示子菜单的操作、小部件和执行操作的操作。” SuperHeavyExpertMenus将是第二种类型的“操作”。 - HostileFork says dont trust SE
菜单操作。我发布了一份文档链接,请跟随它。 - Amartel
1
是的,实际上,myMenu->menuAction()->setvisible(false) 解决了我的问题。 - Ralf Wickum
3个回答

27

如果我正确理解了您的问题,那么您可以通过像这样的方法来解决它:

ui->menuYouWantToHide->menuAction()->setVisible(false);

我希望能够有所帮助。


menuAction.setVisible(False) 在 Python PyQt5 中可用。 - Chris P

3

QMenu没有setVisible()hide()函数,但是可以改变菜单标题来达到隐藏的效果:

ui->MenuYouWantToHide->setTitle("");

这将删除标题,因此也会删除GUI中组成按钮的“操作”。

事实上,当你执行:menu->setTitle("") 时,它就像是 **menu->hide()**。然后,当你稍后设置标题时,菜单将显示所有动作。 - Patapoom
@Patapoom,唯一的区别是它仍然“可见”,这可能会影响某些依赖它的逻辑。请注意,这不会禁用与相同操作相关联的快捷键。 - Swift - Friday Pie

0

可以通过与其连接的QAction对象来控制基于QAction的小部件的可见性和启用性。

Qt文档,即使是最新版本,也省略了多个访问器函数在公共函数列表中。相反,它们在相关的getter下引用,例如QAction::setVisibleQAction::isVisible主题下列出。


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