2017-09-07 44 views
1

我想要做的是将自定义CSS应用于从QLabel派生的自定义小部件,但我没有运气。CSS样式表不适用于自定义QWidget

我已经定义了自定义类为:

class CustomLabel : public QLabel { 

} 

我没有重新实现的paintEvent功能,因为我认为,鉴于该标准QLabel支持CSS样式表,我只需要参考此在CSS新的小工具,例如:

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

不幸的是,在运行时,没有风格应用CustomLabel和应用默认QLabel风格。

任何人都可以提出为什么我的CSS规则被忽略为CustomLabel

步骤重新创建

  1. 使用Qt Creator的
  2. 添加派生的自定义类从QLabel,并调用它CustomLabel
  3. 添加QLabel到窗体使用设计
  4. 创建Qt控件项目
  5. 将标签升级为CustomLabel
  6. 应用使用下面的代码样式表中main.cpp

    a.setStyleSheet("CustomLabel {font-weight: bold;}"); 
    
  7. 运行程序,并注意如何CustomLabel不按照CSS样式风格。

+0

如果您的CustomLabel具有名称空间,则需要将该名称空间添加到您的css中。请参阅此问题:https://stackoverflow.com/questions/26206492/qt-stylesheet-in-derived-class-in-c-namespace-selector –

回答

0

好了,我已经成功地找到一个“解决办法”,而不是一个合适的回答:使用accessibleName参数。

所以在Qt Creator中,分配一个值,如CustomLabelQLabelaccessibleName领域,并在CSS文件中,添加以下内容:

QLabel[accessibleName="CustomLabel"] { 
    font-size: 11px; 
} 
+0

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

1

你应该使用宏Q_OBJECTCustomLabel定义中,否则CustomLabel不知道Qt的类型系统:

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(); 
} 
+0

不幸的是,我已经试过这个,它没有任何区别。 – weblar83

+0

我已添加[mcve]。这适用于我使用Qt 5.9。 – m7913d

+0

嗯,有趣 - 我使用5.9.1,它不适合我。我做了一个'干净的',运行'qmake'和'build' – weblar83

0

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