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

时间:2015-10-04 11:10:26

标签: c++ qt qtstylesheets qpushbutton

我正在通过继承QPushButton来创建自定义按钮类。但是出于某种原因,在其构造函数中设置该类的CSS没有任何效果;我必须在例如paintEvent中进行,然后一切都很好。我可以拥有一个全局.qss文件并为整个应用程序设置它,但我希望该类管理自己的样式。为什么我的方法不起作用?

代码:

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),请查看您是否编辑了对象{{1 Qt Creator中的属性 - 在属性列表中向下滚动并确保styleSheet为空并且不是BOLD - 这就是我的问题。如果它是粗体,则表示Qt仍然使用该空字段作为对象的CSS,从而覆盖您的样式。要清除它,请点击Qt Creator中字段旁边的小箭头,或打开.ui文件并删除styleSheet XML属性。

感谢JMik指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

设置样式表的性能成本非常高,特别是如果您正在为嵌入式系统开发。

我建议,就像你说的那样,使用全局样式表并指定类名,如下所示:

CustomPushButton { background-color: black; }

这样所有CustomPushButton都具有相同的样式,并且该对象将花费更少的时间来创建。

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

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