在 QPushButton 的子类的构造函数中设置 CSS

Set CSS in QPushButton's subclass's constructor

我正在通过 subclassing QPushButton 创建自定义按钮 class。但是由于某种原因,在其构造函数中设置 class 的 CSS 无效;我必须在 paintEvent 中这样做,然后一切都很好。我可以只拥有一个全局 .qss 文件并为整个应用程序设置它,但我希望 class 管理它自己的样式。为什么我的方法不起作用?

代码:

custompushbutton.h

class CustomPushButton: public QPushButton
{
    Q_OBJECT

public:
    explicit CustomPushButton(QWidget *parent = 0);
    ~CustomPushButton() = default;
};

custompushbutton.cpp

CustomPushButton::CustomPushButton(QWidget *parent)
    : QPushButton(parent)
{
    setStyleSheet("background-color: black;");   // this does not work
}


编辑: 对于未来的读者,如果您遇到类似的问题(即 Qt 似乎忽略了您在代码中设置的 CSS),看看您是否尚未在 Qt Creator 中编辑对象的 styleSheet 属性 - 在属性列表中向下滚动并确保 styleSheet 为空且不粗体 - 这就是我的问题。如果它是粗体,则表示 Qt 仍在使用该空字段作为对象的 CSS,从而覆盖您的样式。要清除它,请点击 Qt Creator 中该字段旁边的小箭头或打开 .ui 文件并删除 <styleSheet> XML 属性。

感谢 JMik 为我指明了正确的方向。

设置样式表的性能成本高得惊人,尤其是在为嵌入式系统开发时。

如您所说,我建议使用全局样式表并指定 class 名称,如下所示:

CustomPushButton { background-color: black; }

这样所有 CustomPushButton 都将具有相同的样式,并且对象的创建时间会更短。

至于它在您的情况下不起作用的原因,我猜想您可能在创建 CustomPushButton 后不小心再次更改了样式表。

我在我这边测试了你的代码并且它有效,所以它可能与你没有显示的代码有关