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,运行qmakebuild【参考方案2】:

尝试为您的自定义标签设置Qt::WA_StyledBackground 属性。

【讨论】:

【参考方案3】:

好的,所以我设法找到了一个“解决方法”而不是正确的答案:使用accessibleName 参数。

所以在 Qt Creator 中,为 QLabelaccessibleName 字段分配一个值,例如 CustomLabel,并在 CSS 文件中添加以下内容:

QLabel[accessibleName="CustomLabel"] 
    font-size: 11px;

【讨论】:

accessibleName 是 QWidget 的一个属性。它可以改变。 doc.qt.io/qt-5/qwidget.html#accessibleName-prop

以上是关于CSS 样式表不适用于自定义 QWidget的主要内容,如果未能解决你的问题,请参考以下文章

QListView 样式表不适用于委托

自定义样式不适用于 angular 10

将 CSS 样式表与 ASP.NET 自定义控件链接

自定义样式的 MUI 图标按钮不适用于工具提示

CSS - 原始与自定义样式表 - 覆盖样式的正确方法

css 用于样式字段标签的自定义CSS