繁体   English   中英

Qt QMenu 设置样式表

[英]Qt QMenu setting a stylesheet

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

QMenu *logoMenu = new QMenu();

然后我将它添加到 QToolButton 像这样

logoButton->setMenu(logoMenu);

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

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,我知道我正在正确加载样式表,因为我可以设置其他小部件的样式。

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

logoMenu->setStyleSheet("QMenu {.....}");

这是我创建 QMenu 的方法:

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");

它有效,没问题。 有谁知道为什么会这样?

您的 ID 选择器是 QMenu#logoMenu

这意味着匹配对象名称为“logoMenu”的所有“QMenu”实例。 所以你需要设置 QMenu 的对象名称( yourMenu->setObjectName( "logoMenu" ) )

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

从你在Ashifs下的评论来看,你在 Qt 对象树中缺少一个连接。 尝试使用与样式表有连接的父级实例化 QMenu。 大概只是:

QMenu *logoMenu = new QMenu(this);

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

qApp->setStyleSheet("...");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM