You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt如何实现QMenuBar中指定QMenu的标题单独加粗显示?

Qt QMenuBar指定菜单标题设置为粗体解决方案

问题根因

你的猜测是正确的,QMenuBar::addMenu(QMenu*) 方法不会直接用传入的QMenu对象做标题展示,菜单栏上显示的菜单标题本质是该方法返回的QAction实例,因此你之前给QMenu设置样式、字体的操作都只会作用于QMenu内部的子action,不会影响菜单栏上的标题。


方案1:直接修改对应QAction的字体(最简便,无样式表冲突)

直接接住addMenu返回的QAction对象,修改它的字体属性即可,不会影响其他菜单和子action:

QMenuBar* pQMenubar = new QMenuBar();        
pQMenubar->addMenu(new QMenu("Fichier"));
pQMenubar->addMenu(new QMenu("Windows"));
pQMenubar->addMenu(new QMenu("Tools"));

QMenu* pQMenuTest = new QMenu("Test");
// 接住addMenu返回的、对应菜单栏标题的QAction
QAction* testTitleAction = pQMenubar->addMenu(pQMenuTest);

// 仅修改该标题的字体为粗体
QFont titleFont = testTitleAction->font();
titleFont.setBold(true);
testTitleAction->setFont(titleFont);

方案2:通过样式表实现

如果需要统一用样式表管理样式,可以给对应QAction设置唯一objectName后通过样式表筛选:

QMenu* pQMenuTest = new QMenu("Test");
QAction* testTitleAction = pQMenubar->addMenu(pQMenuTest);
// 给目标标题Action设置唯一objectName
testTitleAction->setObjectName("testMenuTitle");

// 给QMenuBar设置样式表,仅筛选指定objectName的QAction
pQMenubar->setStyleSheet(R"(
    QAction#testMenuTitle {
        font-weight: bold;
    }
)");

两种方案都只会让菜单栏上的Test标题变粗,不会影响该菜单内部的子action,也不会影响其他菜单的样式。


内容的提问来源于stack exchange,提问作者LeanartDjeelmor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:24:02