如何让 QMenuBar 项目出现在其 QMenu 上

Posted

技术标签:

【中文标题】如何让 QMenuBar 项目出现在其 QMenu 上【英文标题】:How can I make a QMenuBar item appear over its QMenu 【发布时间】:2014-09-30 21:04:47 【问题描述】:

首先,我对 Qt 和 Qt Creator 还很陌生,所以如果这是一个愚蠢的问题,请放轻松。

我正在练习使用 Qt Creator,玩弄 css 样式。特别是,我试图让菜单栏及其菜单看起来像这样(在 Windows 上):http://i.stack.imgur.com/9lMnQ.png。

但是,到目前为止,我能得到的最接近的是:http://i.stack.imgur.com/5Nlen.png。

我在网上搜索过是否有人尝试过类似的方法,但我找不到任何东西。

我能想到的唯一可能的解决方案是菜单栏项(没有底部边框)是否可以呈现在菜单上方,以便它们重叠,覆盖它们重叠宽度的顶部边框。

如果这不起作用或不可能或其他任何建议任何其他解决方案/解决方法/黑客。

提前致谢!

【问题讨论】:

当您将窗口移动到监视器 egde 时,菜单位置将发生变化。例如,如果它可以适合显示器,它可以打开到菜单栏项的顶部。您将如何处理? 【参考方案1】:

我认为唯一好的解决方案是避免任何技巧并创建一个新的小部件:

使用Qt::Popup 属性创建一个继承自QWidget 的新类。 将QMenu 放入小部件的布局中。 获取使用QMenuBar::getActionGeometry点击的QMenuBar项目的位置。 计算小部件和小部件中要放置在菜单栏项上的选项卡的位置。 使用QWidget::setMask 自定义小部件的形式,使其看起来像一个带有标签的矩形。 显示您的小部件而不是 QMenu

【讨论】:

以上是关于如何让 QMenuBar 项目出现在其 QMenu 上的主要内容,如果未能解决你的问题,请参考以下文章

如何将 QWidget 添加到 QMenuBar?

Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能

QMenuBar的自绘处理和弹出位置控制

PyQt5 组件之QMenuBar

5.1 Qmenu菜单栏

PySide/PyQt 中 QTableWidget 的 QMenu