为自定义 QT 类应用不同的 QSS 样式表

Erw*_*lle 1 qt qt5 qtstylesheets

我正在为我的 GUI 使用 qss 样式表。它工作得很好,但我想为我的自定义小部件定义不同的样式表。例如,QPushbutton的样式效果很好,但我想应用不同的样式MyQPushButton(从 QPushButton 扩展)。

我尝试过这样的事情:

MyQPushButton
{
    color: #dcdcdc;
    // some code here
}

QPushButton
{
    color: #b1b1b1;
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

不过QPushButton的风格已经被应用了MyQPushButton。如何覆盖这种行为?

ymo*_*eau 6

Ozan Yurtsever的答案有效,但却是不好的做法。
您不应该在样式表中使用对象名称,除非您想在应用程序中设置非常独特的小部件的样式。它很容易出错并且比较冗长。

默认情况下,Qt 样式表已经允许您想要的内容,您可以覆盖子类的样式(请参阅文档这部分的末尾)。
正如文档中所述,样式表中声明的顺序很重要,因此您的样式表应该是:

QPushButton
{
    color: #b1b1b1;
    // some code here
}
MyQPushButton
{
    color: #dcdcdc;
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

否则 的样式QPushButton将覆盖 的样式,MyQPushButton因为MyQPushButton也是QPushButton.

还可以将样式的范围限制为仅类而不是子类.QPushButton { /*some code*/ },请参阅有关选择器的文档

最后一个提示,我遇到了样式表不适用于子类的问题,请检查您是否没有忘记Q_OBJECT子类中的宏。