在 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 后不小心再次更改了样式表。
我在我这边测试了你的代码并且它有效,所以它可能与你没有显示的代码有关
我正在通过 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 后不小心再次更改了样式表。
我在我这边测试了你的代码并且它有效,所以它可能与你没有显示的代码有关