Qt如何实现QMenuBar中指定QMenu的标题单独加粗显示?
问题根因
你的猜测是正确的,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
相关产品推荐
相关产品推荐

