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

标签 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
}


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

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

最佳答案

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

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

CustomPushButton { background-color: black; }

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

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

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

关于c++ - 在 QPushButton 的子类的构造函数中设置 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32932810/

相关文章:

c++ - QLocale,全局QLocale::setDefault()的范围是什么?

c++ - 基于模板参数推导利用的 STL 算法名称可解析或未定义

mysql - QSqlTableModel 空结果

c++ - 根据窗口大小动态更改 QToolButtons 的 ToolButtonStyle

qt - QLabel 中图像附近的垂直居中文本

如果使用自定义类类型作为键,C++ unordered_set 的计数和查找将不起作用

c++ - 在没有堆分配的情况下使用虚拟方法实例化类

c++ - 单击按钮时如何使 linedit 准备好输入

c++ - 如何在 Qt 中以编程方式将 QWidget 设置在窗口的中央?

c++ - 如何在我的 QMainWindow 中使用我自定义的最小化/关闭窗口按钮?