CSS 样式表不适用于自定义 QWidget
Posted
技术标签:
【中文标题】CSS 样式表不适用于自定义 QWidget【英文标题】:CSS Stylesheet is not applied to custom QWidget 【发布时间】:2018-02-16 00:35:55 【问题描述】:我正在尝试将自定义 CSS 应用于派生自 QLabel
的自定义小部件,但我没有运气。
我将自定义类定义为:
class CustomLabel : public QLabel
我没有重新实现 paintEvent
函数,因为我认为鉴于标准 QLabel
支持 CSS 样式表,我只需要在 CSS 中引用这个新小部件,例如:
CustomLabel
background-color: #111111;
font-size: 18px;
font-weight: bold;
不幸的是,在运行时,CustomLabel
没有应用样式,而是应用了默认的 QLabel
样式。
谁能指出为什么我的 CSS 规则被 CustomLabel
忽略了?
重建步骤
-
使用 Qt Creator 创建 Qt Widgets 项目
添加一个派生自
QLabel
的自定义类并将其命名为CustomLabel
使用设计器将QLabel
添加到表单中
将标签提升为CustomLabel
类
使用main.cpp
中的以下代码应用样式表:
a.setStyleSheet("CustomLabel font-weight: bold;");
运行程序,注意CustomLabel
的样式与 CSS 样式不一致。
【问题讨论】:
如果您的 CustomLabel 有命名空间,您需要将该命名空间添加到您的 css。参考这个问题:***.com/questions/26206492/… 【参考方案1】:您应该在CustomLabel
定义中使用宏Q_OBJECT
,否则Qt 的类型系统不知道CustomLabel
:
class CustomLabel : public QLabel
Q_OBJECT
MCVE
CustomLabel.h:
#include "QLabel"
class CustomLabel : public QLabel
Q_OBJECT
;
main.cpp:
#include "QApplication"
#include "CustomLabel.h"
int main(int argc, char * argv[])
QApplication a(argc, argv);
a.setStyleSheet("CustomLabel font-weight: bold; background-color: red;");
CustomLabel label;
label.setText ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua");
label.show ();
a.exec ();
【讨论】:
不幸的是我已经尝试过了,但没有任何区别。 我添加了minimal reproducible example。这适用于我使用 Qt 5.9。 嗯,有趣 - 我使用的是 5.9.1,但它对我不起作用。我已经完成了clean
,运行qmake
和build
【参考方案2】:
尝试为您的自定义标签设置Qt::WA_StyledBackground
属性。
【讨论】:
【参考方案3】:好的,所以我设法找到了一个“解决方法”而不是正确的答案:使用accessibleName
参数。
所以在 Qt Creator 中,为 QLabel
的 accessibleName
字段分配一个值,例如 CustomLabel
,并在 CSS 文件中添加以下内容:
QLabel[accessibleName="CustomLabel"]
font-size: 11px;
【讨论】:
accessibleName 是 QWidget 的一个属性。它可以改变。 doc.qt.io/qt-5/qwidget.html#accessibleName-prop以上是关于CSS 样式表不适用于自定义 QWidget的主要内容,如果未能解决你的问题,请参考以下文章