2015-10-04 69 views
1

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

的代码:

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是空的而不是BOLD--这是我的情况。如果它是粗体,这意味着Qt仍然使用该空白字段作为对象的CSS,从而覆盖您的样式。要清除它,可以点击Qt Creator中字段旁边的小箭头,也可以打开.ui文件并删除XML属性<styleSheet>

感谢JMik指引我朝着正确的方向。

+0

它为我工作Qt的5.5和Linux –

回答

1

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

我建议,像你说的,使用全局样式表,并指定类名,比如:

CustomPushButton { background-color: black; } 

这种方式,所有CustomPushButton将具有相同的风格,该对象将需要更少的时间创造。

至于为什么它不起作用的原因,我猜你可能会在创建CustomPushButton后再次意外地更改样式表。

我测试你的代码在我的身边和它的工作,所以它可能有事情做与你的代码没有显示

+0

好了,谢谢你的建议,我会试着在我的代码中找到问题:) – szczurcio

相关问题