CSS样式表不适用于自定义QWidget

时间:2017-09-07 10:02:13

标签: qt widget qtstylesheets

我尝试做的是将自定义CSS应用于源自QLabel的自定义窗口小部件,但我没有运气。

我将自定义类定义为:

class CustomLabel : public QLabel {

}

我没有重新实现paintEvent函数,因为我认为标准QLabel支持CSS样式表,我只需要在CSS中引用这个新的小部件,例如:

CustomLabel {
    background-color: #111111;
    font-size: 18px;
    font-weight: bold;
}

不幸的是,在运行时,CustomLabel没有应用任何样式,并且应用了默认的QLabel样式。

有人可以建议为什么CustomLabel忽略我的CSS规则吗?

重新创建的步骤

  1. 使用Qt Creator创建Qt Widgets项目
  2. 添加源自QLabel的自定义类,并将其命名为CustomLabel
  3. 使用设计器
  4. 在表单上添加QLabel
  5. 将标签提升为CustomLabel
  6. 使用main.cpp中的以下代码应用样式表:

    a.setStyleSheet("CustomLabel {font-weight: bold;}");
    
  7. 运行程序并注意CustomLabel未按照CSS样式设置样式。

3 个答案:

答案 0 :(得分:1)

您应该在Q_OBJECT定义中使用宏CustomLabel,否则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 ();
}

答案 1 :(得分:0)

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

因此,在Qt Creator中,将CustomLabel之类的值分配给accessibleName的{​​{1}}字段,并在CSS文件中添加以下内容:

QLabel

答案 2 :(得分:0)

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