我有一个我这样创建的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");
它有效,没问题。有谁知道为什么会这样?
答案 0 :(得分:1)
您的Id选择器是QMenu#logoMenu
表示匹配对象名称为的所有“QMenu”实例 “logoMenu”。所以你需要设置QMenu的对象名称( yourMenu-> setObjectName(“logoMenu”))
注意:如果使用ui designer创建QMenu,Ui编译器将为yourMenu-> setObjectName(“logoMenu”)生成代码。但是如果您要创建自己的QMenu,则需要明确设置对象名称以使用您的样式类型。
答案 1 :(得分:1)
根据您在 Ashifs answer 下的评论判断,您在 Qt 对象树中缺少一个连接。尝试使用与样式表有连接的父级实例化 QMenu。可能只是:
QMenu *logoMenu = new QMenu(this);
或者,您可以通过将样式表应用程序添加到 QApplication 实例来将其设置为全局:
qApp->setStyleSheet("...");