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

Apply different QSS stylesheet for custom QT class

我正在为我的图形用户界面使用 qss 样式sheet。它运行良好,但我想为我的自定义小部件定义不同的样式 sheet。 例如,QPushbutton 的样式效果很好,但我想为 MyQPushButton 应用不同的样式(从 QPushButton 扩展)。

我试过这样的事情:

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

QPushButton
{
    color: #b1b1b1;
    // some code here
}

但是QPushButton的样式已经应用到MyQPushButton。 如何覆盖此行为?

如果您想为项目中的特定元素设置样式,可以这样使用;

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

我假设,您已经将新的 QPushButton 对象命名为 MyQPushButton,您可以这样命名一个元素;

QPushButton* myButton = new QPushButton;
myButton->setObjectName("MyQPushButton");

如果不命名您的元素,您将无法访问它以为其提供覆盖样式。

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

Qt 样式表默认已经允许你想要的,你可以覆盖子classes 的样式(见this part of the doc 的结尾)。
如文档中所述,样式表中声明的顺序很重要,因此您的样式表应为:

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

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

也可以将您的样式范围限制为仅 class,而不是 .QPushButton { /*some code*/ } 的子 class,请参阅 the doc about selectors

最后一个提示,我遇到了样式表不适用于 subclass 的问题,请检查您是否没有忘记 subclass.[=19= 中的 Q_OBJECT 宏]