我正在为我的GUI使用qss样式表。它运作良好,但我想为我的自定义窗口小部件定义不同的样式表。
例如,QPushbutton
的样式效果很好,但是我想为MyQPushButton
应用不同的样式(从QPushButton扩展)。
我尝试过这样的事情:
MyQPushButton
{
color: #dcdcdc;
// some code here
}
QPushButton
{
color: #b1b1b1;
// some code here
}
但是QPushButton
的样式已应用于MyQPushButton
。
如何覆盖此行为?
答案 0 :(得分:1)
如果要在项目中设置特定元素的样式,则可以像这样使用它;
QPushButton#MyQPushButton
{
color: #dcdcdc;
// some code here
}
我假设您已经将新的QPushButton
对象命名为MyQPushButton
,则可以这样命名元素;
QPushButton* myButton = new QPushButton;
myButton->setObjectName("MyQPushButton");
如果没有命名元素,则无法访问它以赋予其替代样式。
答案 1 :(得分:1)
奥赞(Ozan Yurtsever)的答案行之有效,但却是不明智的做法。
除非要在应用程序中设置非常独特的小部件样式,否则不应将对象名称用于样式表。容易出错,而且更冗长。
默认情况下,Qt样式表已经允许您想要的样式,您可以覆盖子类的样式(请参见this part of the doc的结尾)。
如文档中所述,样式表中声明的顺序很重要,因此您的样式表应为:
QPushButton
{
color: #b1b1b1;
// some code here
}
MyQPushButton
{
color: #dcdcdc;
// some code here
}
否则,QPushButton
的样式将覆盖MyQPushButton
的样式,因为MyQPushButton
也是QPushButton
。
还可以将样式的范围仅限制为类,而不限于.QPushButton { /*some code*/ }
的子类,请参见the doc about selectors。
最后一个提示,我遇到样式表不适用于子类的问题,请检查您是否没有忘记子类中的Q_OBJECT
宏。