在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_OBJECT
Q_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);