首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QMenu设置样式表

Qt QMenu设置样式表
EN

Stack Overflow用户
提问于 2013-09-07 05:36:26
回答 2查看 3.6K关注 0票数 0

我有一个像这样创建的QMenu。

代码语言:javascript
复制
QMenu *logoMenu = new QMenu();

然后将其添加到QToolButton中,如下所示

代码语言:javascript
复制
logoButton->setMenu(logoMenu);

现在,我有了一个包含以下QMenu样式表的project.qss文件

代码语言:javascript
复制
QMenu#logoMenu {
     background-color: #161614; /* sets background of the menu */
     border: 0px solid #161614;
     width: 150px;
     position: absolute;
     top: 50px;
 }

 QMenu::item#logoMenu {  
     background-color: transparent;
 }

 QMenu::item:selected#logoMenu { 
     background-color: #202020;
 }

我的问题是样式表不适用于QMenu,我知道我正确地加载了样式表,因为我可以设置其他小部件的样式。

如果我像这样手动设置样式表

代码语言:javascript
复制
logoMenu->setStyleSheet("QMenu {.....}");

下面是我创建QMenu的方法:

代码语言:javascript
复制
logoMenu        = new QMenu();
logoMenu->addAction(QString::fromUtf8("Import"));
logoMenu->addAction(QString::fromUtf8("Export"));
logoMenu->addAction(QString::fromUtf8("Help"));
logoMenu->addAction(QString::fromUtf8("Exit"));
logoMenu->setObjectName("logoMenu");

它起作用了,没问题。有人知道为什么会这样吗?

EN

回答 2

Stack Overflow用户

发布于 2013-09-07 10:44:18

您的Id选择器为QMenu#logoMenu

表示匹配所有object名称为logoMenu的QMenu实例。所以需要设置QMenu的对象名(您的菜单->setObjectName( "logoMenu“))

注意:如果QMenu是使用ui designer创建的,Ui编译器将为您的菜单->setObjectName( "logoMenu“)生成代码。但是,如果您正在创建自己的QMenu,则需要显式设置对象名称以使用您的样式类型。

票数 1
EN

Stack Overflow用户

发布于 2021-06-11 14:35:21

从您在Ashifs answer下的注释判断,您在Qt对象树中缺少一个连接。尝试使用连接到样式表的父级实例化QMenu。可能只是:

代码语言:javascript
复制
QMenu *logoMenu = new QMenu(this);

或者,您可以通过将样式表应用程序添加到QApplication实例来将其设置为全局的:

代码语言:javascript
复制
qApp->setStyleSheet("...");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18666944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档