Qt Style Sheets

Qt設置界面方式

1.繼承QStyle,實現自定義子類

 

2.Qt Style Sheets(類似與HTML CSS)配置

概覽

       QApplication::setStyleSheet設置應用程序的全部樣式;

       QWidget::setStyleSheet設置特定QWidget或者其子類的樣式。

       Qt Style Sheets支持級聯設置,比QPalette的功能更加強大,當一個style sheet設置後,QWidget::style()將返回樣式包裝器,而不是平臺本身的樣式。

語法

       1selector+declaration  selector是界面 declaration是界面屬性

例如:QPushButton {color:red}  QPushButton是selector {color:red}是declaration

規則:QPushButton和它的子類的前景色是紅色。

        2.declaration大小寫不敏感,color Color COLOR和cOloR表示同一屬性。

        3.selector帶下斜敏感,類名  對象名和Qt屬性名(?)

        4.不同的selector可以用逗號(,)分隔組裝後,使用相同的declaration。

例如:QPushButton,QLineEdit,QComboBox{color:red} == 

QPushButton{color:red}

QLineEdit{color:red}       

QComboBox{color:red}

        5.declaration由一組property:value組成,用{}包起來。

例如:QPushButton{color:red; background-color:white}

         6.selector類型

universal selector * 所有widgets
type selector QPushButton QPushButton和它的子類
property selector QPushButton[flat="false"]

flat是false的QPushButton

= QWidget中的屬性必須支持可以調用toString,

~=QWidget中的屬性包含設置的屬性名

class selector .QPushButton QPushButton,不包含其子類,該表達式等價於 *[class ~= "QPushButton"]
id selector QPushButton#okButton QPushButton對象名爲okButton, object name
descendant selector QDialog QPushButton QPushButton的父對象、祖父對象等是QDialog
child selector QDialog QPushButton QPushButton的父對象是QDialog(直屬對象)

        7.sub-controls

        複雜界面,有子控制對象的widget,例如QComboBox包含drop-down按鈕,QSpinBox包含up and down arrows。

selector可以包含子控制對象。例如

       QComboBox::drop-down{image:url(dropdown.png)}

        8.pseudo-states

       selectors可以包含pseudo-states,設置widget某一種狀態。用冒號(:)間隔。例如 QPushButton:hover{color:white}

支持!符號 如:QRadioButton:!hover{color:red}

支持串聯,如:QCheckBox:hover:checked{color:white}     

                          QPushButton:hover:!pressed{color:blue}

                          QCheckBox:hover, QCheckBox:checked{color:white}

                           QComboBox::drop-down:hover{image:url(dropdown_bright.png)}

         9conflic Resolution

         考慮到對同一對象的同一屬性多次設置樣式,如

         a. QPushButton#okButton{color:gray}

         b. QPushButton{color:red}

          a樣式比b樣式更具針對性,故優先。

         帶有pseudo-states的selector,如

         a. QPushButton:hover{color:white}

         b. QPushButton{color:red}

         a比b具有高優先級

       

          對於衝突的屬性設置,遵循下列規則

          1.

 

           10.級聯

           qApp->setStyleSheet("QPushButton{color:white}");

           myPushButton->setStyleSheet("color:blue");

           myPushButton的color爲blue.

           11.繼承

           qApp->setStyleSheet("QGroupBox{color:red;}");

如果QPushButton是QGroupBox的子對象,QPushButton不繼承QGroupBox的設置,若需要QPushButton繼承樣式,

qApp->setStyleSheet("QGroupBox, QGroupBox *{color:red;}");

或者qApp->setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles, true);

如果palette和style sheet同時設置,style sheet具有高優先級。

            12.命名空間

             namespace ns{

            class MyPushButton : public QPushButton{};

            }

            qApp->setStyleSheet("ns--MyPushButton{background-color:yellow;}");

           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章