Qt QSS 属性 vs QObject属性
迪丽瓦拉
2024-03-03 22:01:51
0

在QSS(Qt Style Sheet)语法中,通过组合一系列的property: value 属性-值对定义样式,如

QLabel { background-color: yellow }
QLineEdit { background-color: rgb(255, 0, 0) }

Qt结合自身体系和CCS 定义了QSS属性 :List of Properties

相对地,Qt里还有一个对象属性(QObject Properties)的概念,就是那些通过Q_PROPERTY声明的变量,如

class Q_WIDGETS_EXPORT QLabel : public QFrame
{Q_OBJECTQ_PROPERTY(QString text READ text WRITE setText)Q_PROPERTY(Qt::TextFormat textFormat READ textFormat WRITE setTextFormat)Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)Q_PROPERTY(bool scaledContents READ hasScaledContents WRITE setScaledContents)Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)...

在阅读文档时注意区分这两个”属性“

对于QSS属性,不同的qt版本、不同的UI控件均有不同,用之前都得去查List of Properties
如果QSS属性不支持,可以看看QObject Properties中有没有对应的属性,通过qproperty-的方式设置,如

MyLabel { qproperty-pixmap: url(pixmap.png); }
MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }
QPushButton { qproperty-iconSize: 20px 20px; }

比如QSS的文本对齐属性text-align,只支持QPushButton QProgressBar,如果想在QLabel上对齐,可以利用QLabel的alignment属性:

MyLabel { qproperty-alignment: AlignCenter; }

注意qproperty-alignment的值类型不是QSS里面的Alignment,而是QLabel里面的类型Qt::AlignCenter

class Q_WIDGETS_EXPORT QLabel : public QFrame
{
...Qt::Alignment alignment() const;void setAlignment(Qt::Alignment);

见 Setting QObject Properties

相关内容