本文主要是對官方文檔的翻譯。
Qss(Qt style sheet)是一種樣式文本規(guī)范,可以使用QApplication::setStyleSheet()來設(shè)置整個(gè)應(yīng)用的樣式或者使用QWidget::setStyleSheet()設(shè)置某個(gè)QWidget(包括其子類)窗體的樣式。Qss具有級聯(lián)屬性,即假設(shè)在不同的級別設(shè)置了多個(gè)樣式表,那么Qt將從所有設(shè)置的樣式表中派生出有效的樣式表。樣式表可以讓您執(zhí)行所有類型的定制,這些定制僅使用QPalette是很難或不可能執(zhí)行的。例如,你想要黃色背景作為強(qiáng)制字段,紅色文本作為潛在的破壞性按鈕,或者花哨的復(fù)選框,樣式表就是答案。
樣式規(guī)則由一個(gè)選擇器(selector)和一個(gè)聲明(declaration)組成。選擇器指定哪些Widget受到該規(guī)則的影響;聲明指定應(yīng)該在Widget上設(shè)置哪些屬性。例如:QPushButton { color: red } ,QPushButton是selector,{color:red}是declaration,這個(gè)規(guī)則指定QPushButton和其子類應(yīng)該使用紅色作為前景色(文本顏色)。樣式規(guī)則中的申明部分是由一個(gè){property:value}表組成的,例如:QPushButton { color: red; background-color: white }。當(dāng)多個(gè)類型的Widget具有相同的{property:value}時(shí)也可以在selector部分使用逗號隔開,例如QPushButton, QLineEdit, QComboBox { color: red }。
Qt樣式表支持CSS2中定義的所有選擇器。下表總結(jié)了常用的選擇器類型。
selector | 示例 | 解釋 |
Universal Selector | * | 匹配所有Widget |
Type Selector | QPushButton | 匹配所有QPushButton組件和其子組件 |
Property Selector | QPushButton[flat="false"] | 匹配所有非平面(flat="false")屬性的QPushButton。這種過濾器中過濾的對象需要先設(shè)置QVariant支持的類型屬性(setProperty(“flat”, “false”))。 警告:如果在樣式表設(shè)置之后Qt屬性的值發(fā)生變化,可能需要強(qiáng)制樣式表重新計(jì)算。實(shí)現(xiàn)此目的的一種方法是取消樣式表的設(shè)置并再次設(shè)置它。 |
Class Selector | .QPushButton | 匹配QPushButton組件,但是不包含其子類。 |
ID Selector | QPushButton#okButton | 匹配所有對象名是okButton的QPushButton控件 |
Descendant Selector | QDialog QPushButton | 匹配QPushButton的所有實(shí)例,它們是QDialog的后代控件(子控件、孫控件等)。 |
Child Selector | QDialog > QPushButton | 匹配QPushButton的所有實(shí)例,它們是QDialog的直接子對象。 |
下表列出了Qt樣式表支持的常用屬性(所有屬性見https://doc.qt.io/qt-5/stylesheet-reference.html)。可以給屬性賦哪些值取決于屬性的類型。除非另有說明,以下屬性適用于所有小部件。標(biāo)記有星號*的屬性是特定于Qt的,在CSS2或CSS3中沒有相同的屬性。
Proprty | 類型 | 解釋 |
alternate-background-color | Brush |
|
background | Background | 設(shè)置窗體背景的簡寫,包括設(shè)置 |
background-color | Brush | 設(shè)置窗體的背景顏色。例如:QLabel { background-color: yellow } QLineEdit { background-color: rgb(255, 0, 0) } |
background-image | Url | 設(shè)置窗體的背景圖片,圖像的半透明部分讓背景色透過。例:QFrame { background-image: url(:/images/hydro.png) } |
background-repeat | Repeat | 設(shè)置背景圖像是否重復(fù)填充背景原點(diǎn)矩形,以及如何重復(fù)填充。默認(rèn)是在兩個(gè)方向上重復(fù)(repeat)。 |
background-position | Alignment | 背景原點(diǎn)矩形內(nèi)背景圖像的對齊。默認(rèn)對齊方式為左上角。?????? |
background-attachment | Attachment | 設(shè)置QAbstractScrollArea中的背景圖像相對于視口是滾動(dòng)還是固定。默認(rèn)情況下,背景圖像會隨著視口滾動(dòng)。 |
background-clip | Origin | 設(shè)置背景色和背景圖像被剪切填充背景矩形的方式。 |
background-origin | Origin | 設(shè)置窗體的背景矩形,與背景位置和背景圖像一起使用。 |
border | Border | 設(shè)置窗體的邊框?qū)傩裕╞order-color , border-style和border-width。也可以使用border-top、border-left等獨(dú)立設(shè)置邊框的每一條邊的樣式。例如:QLineEdit { border: 1px solid white } 、QLineEdit { border-right: 1px solid white } |
border-color | Box Colors | 設(shè)置邊框的顏色樣式,同樣可以使用
|
border-image | Border Image | 使用圖片來填充邊框。圖像被切成九個(gè)部分(top left, top center, top right, center left, center, center right, bottom left, bottom center, and bottom right),并在必要時(shí)適當(dāng)拉伸。 |
border-radius | Radius | 設(shè)置矩形四個(gè)角的弧度,還可以使用 QLineEdit { border-radius: 4px; } |
border-style | Border Style | 設(shè)置邊框線的類型,還可以使用border-top-style , border-right-style等來指定任意線的類型。 QLineEdit { border-style: solid;} |
border-width | Box Lengths | 設(shè)置邊框線的寬度,同樣可以使用border-top-width , border-right-width等設(shè)置特定線的寬度。 QLineEdit { border-width: 1px;} |
bottom | Length | 設(shè)置控件中子控件(如ComboBox的下拉按鈕)的位置。若位置是相對的(默認(rèn))則將子控件向上移動(dòng)指定的偏移量;若位置的絕對的,則指定子控件底部與父控件底部的距離。例如:QSpinBox::down-button { bottom: 2px }。同樣可以使用left、top、right等設(shè)置子控件與父控件的其他邊距。使用height設(shè)置子控件高度。 |
color | Brush | 設(shè)置文本的顏色,例如:QPushButton { color: red } |
font | Font | 設(shè)置文字屬性,包括font-family(字體) , font-size(大?。?/code>, |
gridline-color * | Color | 設(shè)置QTableView中網(wǎng)格線的顏色。例如:* { gridline-color: gray } |
icon | Url+ | 設(shè)置具有圖標(biāo)控件的圖標(biāo),目前具有此屬性的控件只有QPushButton。 |
icon-size | Length | 設(shè)置圖標(biāo)的長和寬。 |
image * | Url+ | 在子控件的內(nèi)容矩形中繪制的圖像。例如:QSpinBox::down-button { image: url(:/images/spindown.png) } |
lineedit-password-character* | Number | 設(shè)置QLineEdit中顯示的字符,可使用Unicode的字符編碼指定。例如* { lineedit-password-character: 9679 },表示使用Unicode中9679號字符顯示。 |
lineedit-password-mask-delay* | Number | 在lineedit-password-character應(yīng)用于可見字符之前,QLineEdit密碼掩碼延遲(以毫秒為單位)。例如:* { lineedit-password-mask-delay: 1000 } |
margin | Box Lengths | 設(shè)置窗體與其他窗體的邊緣距離,具體可使用margin-top , margin-right , margin-bottom , 和 margin-left來指定。例如: QLineEdit { margin: 2px } |
padding | Box Lengths | 設(shè)置窗體與內(nèi)部子窗體之間的邊距,同樣可使用 |
spacing* | Length | 設(shè)置內(nèi)部子窗體之間的邊距。例如:QMenuBar { spacing: 10 } |
text-align | Alignment | 設(shè)置字體對齊方式。QPushButton { text-align: left;} |
以上只是簡單介紹一些常用的屬性設(shè)置,具體的各種屬性該怎樣設(shè)置可以查看每個(gè)屬性的類型,官方文檔給出了很詳細(xì)的每種屬性設(shè)置的方式以及意義。
Qss除了對常用控件、窗體的樣式進(jìn)行設(shè)置,還可以對其子控件(如QComboBox的下拉按鈕、QSpinBox的上下按鈕等)的位置,填充圖片等屬性進(jìn)行設(shè)置。此時(shí)可以使用控件名::子控件名來表示selector。例如:QComboBox::drop-down { image: url(dropdown.png) }用來設(shè)置QComboBox的下拉按鈕的圖片。更多的子控件名稱如下表:
子控件 | 解釋 |
---|---|
::add-line | QScrollBar添加一行的按鈕。 |
::add-page | 在句柄(滑塊)和QScrollBar的附加行之間的區(qū)域。 |
::branch | QTreeView的分支指示器。 |
::chunk | QProgressBar的進(jìn)度塊。 |
::close-button | QDockWidget的關(guān)閉按鈕或QTabBar的選項(xiàng)卡 |
::corner | QAbstractScrollArea中兩個(gè)滾動(dòng)條之間的角 |
::down-arrow | QComboBox、QHeaderView(排序指示器)、QScrollBar或QSpinBox的向下箭頭。 |
::down-button | QScrollBar或QSpinBox的向下按鈕。 |
::drop-down | QComboBox的下拉按鈕。 |
::float-button | QDockWidget的浮動(dòng)按鈕 |
::groove | QSlider的凹槽。 |
::indicator | QAbstractItemView、QCheckBox、QRadioButton、可檢查QMenu項(xiàng)或可檢查QGroupBox的指示器。 |
::handle | QScrollBar、QSplitter或QSlider的句柄(滑塊)。 |
::icon | QAbstractItemView或QMenu的圖標(biāo)。 |
::item | QAbstractItemView、QMenuBar、QMenu或QStatusBar的一個(gè)條目。 |
::left-arrow | QScrollBar的左箭頭。 |
::left-corner | QTabWidget的左上角。例如,此控件可用于控制QTabWidget中左側(cè)窗口小部件的位置。 |
::menu-arrow | 帶有菜單的QToolButton的箭頭。 |
::menu-button | QToolButton的菜單按鈕。 |
::menu-indicator | QPushButton的菜單指示器。 |
::right-arrow | QMenu或QScrollBar的右箭頭。 |
::pane | QTabWidget的窗格(框架)。 |
::right-corner | QTabWidget的右角。例如,此控件可用于控制QTabWidget中右下角小部件的位置。 |
::scroller | QMenu或QTabBar的滾動(dòng)條。 |
::section | QHeaderView的部分。 |
::separator | QMenu或qmain窗口中的分隔符。 |
::sub-line | 刪除一行QScrollBar的按鈕。 |
::sub-page | 在句柄(滑塊)和QScrollBar的子行之間的區(qū)域。 |
::tab | QTabBar或QToolBox的選項(xiàng)卡。 |
::tab-bar | QTabWidget的選項(xiàng)卡欄。此子控件的存在只是為了控制QTabWidget中QTabBar的位置。使用::tab子控件樣式化選項(xiàng)卡。 |
::tear | QTabBar的撕裂指示器。 |
::tearoff | QMenu的撕下指示器。 |
::text | QAbstractItemView的文本。 |
::title | QGroupBox或QDockWidget的標(biāo)題。 |
::up-arrow | QHeaderView(排序指示器)、QScrollBar或QSpinBox的向上箭頭。 |
::up-button | QSpinBox的向上按鈕。 |
Qt中有的控件會有許多狀態(tài),有時(shí)需要對不同狀態(tài)進(jìn)行區(qū)分(例如按鈕的選中、按下等狀態(tài)的區(qū)分),需要為不同的狀態(tài)設(shè)置不同的樣式。此時(shí)使用 控件名:狀態(tài)名 表示selector。例如:QPushButton:hover { color: white }表示設(shè)置鼠標(biāo)放在按鈕上時(shí)按鈕字體顏色。更多的狀態(tài)名稱見下表:
偽狀態(tài) | 解釋 |
---|---|
:active | 窗體為活動(dòng)窗體時(shí)的狀態(tài) |
:adjoins-item | 當(dāng)一個(gè)QTreeView的::branch與一個(gè)項(xiàng)目相鄰時(shí),該狀態(tài)被設(shè)置。 |
:alternate | 當(dāng)QAbstractItemView::alternatingRowColors()被設(shè)置為true時(shí),繪制QAbstractItemView的每一行時(shí)都會設(shè)置此狀態(tài)。 |
:bottom | 控件位于底部。例如,QTabBar的標(biāo)簽位于底部。 |
:checked | 選中該項(xiàng)。例如,QAbstractButton的選中狀態(tài)。 |
:closable | 項(xiàng)目可以關(guān)閉。例如,QDockWidget打開了QDockWidget:: dockwidgetcloseable特性。 |
:closed | 項(xiàng)目處于關(guān)閉狀態(tài)。例如,QTreeView中的一個(gè)非展開項(xiàng) |
:default | 該項(xiàng)目是默認(rèn)的。例如,一個(gè)默認(rèn)的QPushButton或QMenu中的一個(gè)默認(rèn)動(dòng)作。 |
:disabled | 該項(xiàng)目被禁用。 |
:editable | QComboBox是可編輯的。 |
:edit-focus | 項(xiàng)目有編輯焦點(diǎn)(見QStyle::State_HasEditFocus)。此狀態(tài)僅適用于Qt擴(kuò)展應(yīng)用程序。 |
:enabled | 啟用該項(xiàng)。 |
:exclusive | 該項(xiàng)是獨(dú)占項(xiàng)組的一部分。例如,獨(dú)占QActionGroup中的菜單項(xiàng)。 |
:first | 該項(xiàng)目是(列表中的)第一項(xiàng)。例如,QTabBar中的第一個(gè)選項(xiàng)卡。 |
:flat | 項(xiàng)目是扁平的。例如,一個(gè)平面的QPushButton。 |
:floatable | 項(xiàng)目可以浮動(dòng)。例如,QDockWidget啟用了QDockWidget:: dockwidgetfloatatable特性。 |
:focus | 項(xiàng)目有輸入焦點(diǎn)。 |
:has-children | 該項(xiàng)目有子項(xiàng)目。例如,QTreeView中的一項(xiàng)有子項(xiàng)。 |
:has-siblings | 該項(xiàng)目有兄弟項(xiàng)。例如,QTreeView中的一個(gè)條目。 |
:horizontal | 項(xiàng)目具有水平方向 |
:hover | 鼠標(biāo)懸停在項(xiàng)目上。 |
:indeterminate | 項(xiàng)目處于不確定狀態(tài)。例如,QCheckBox或QRadioButton被部分選中。 |
:last | 這個(gè)項(xiàng)目是(列表中)最后一個(gè)項(xiàng)目。例如,QTabBar中的最后一個(gè)選項(xiàng)卡。 |
:left | 項(xiàng)目位于左側(cè)。例如,QTabBar的選項(xiàng)卡位于左側(cè)。 |
:maximized | 項(xiàng)目被最大化。例如,最大化的QMdiSubWindow。 |
:middle | 項(xiàng)目在(列表中)中間。例如,一個(gè)不在QTabBar開始或結(jié)束的選項(xiàng)卡。 |
:minimized | 項(xiàng)目被最小化了。例如,最小化的QMdiSubWindow。 |
:movable | 項(xiàng)目可以四處移動(dòng)。例如,QDockWidget啟用了QDockWidget::DockWidgetMovable特性。 |
:no-frame | 該項(xiàng)目沒有框架。例如,一個(gè)無框架的QSpinBox或QLineEdit。 |
:non-exclusive | 項(xiàng)是非排他項(xiàng)組的一部分。例如,非排他的QActionGroup中的菜單項(xiàng)。 |
:off | 對于可以切換的項(xiàng),這適用于處于“關(guān)閉”狀態(tài)的項(xiàng)。 |
:on | 對于可以切換的項(xiàng),這適用于處于“on”狀態(tài)的小部件。 |
:only-one | 該項(xiàng)目是唯一的(在列表中)。例如,QTabBar中的一個(gè)單獨(dú)的標(biāo)簽。 |
:open | 項(xiàng)目處于打開狀態(tài)。例如,一個(gè)在QTreeView中展開的項(xiàng)目,或者一個(gè)帶有打開菜單的QComboBox或QPushButton。 |
:next-selected | 選擇下一個(gè)項(xiàng)目(在列表中)。例如,QTabBar選中的選項(xiàng)卡就在該項(xiàng)的旁邊。 |
:pressed | 項(xiàng)目正在使用鼠標(biāo)按下。 |
:previous-selected | 選中前一個(gè)項(xiàng)目(在列表中)。例如,QTabBar中緊鄰所選選項(xiàng)卡的選項(xiàng)卡。 |
:read-only | 該項(xiàng)被標(biāo)記為只讀或不可編輯。例如,只讀QLineEdit或不可編輯的QComboBox。 |
:right | 項(xiàng)目位于右側(cè)。例如,QTabBar的選項(xiàng)卡位于右側(cè)。 |
:selected | 項(xiàng)目被選中。例如,QTabBar中選定的選項(xiàng)卡或QMenu中選定的項(xiàng)。 |
:top | 項(xiàng)目位于頂部。例如,QTabBar的標(biāo)簽位于頂部。 |
:unchecked | 未選中該項(xiàng)。 |
:vertical | 項(xiàng)目具有垂直方向。 |
:window | 小部件是一個(gè)窗口(即頂層小部件) |
當(dāng)多個(gè)樣式規(guī)則用不同的值指定相同的屬性時(shí),考慮以下樣式表:QPushButton#okButton { color: gray } QPushButton { color: red } 。這兩個(gè)規(guī)則都匹配名為okButton的QPushButton實(shí)例,并且對于color屬性存在沖突。為了解決這個(gè)沖突,我們必須考慮選擇器的特殊性。在上面的例子中,QPushButton#okButton被認(rèn)為比QPushButton更具體,因?yàn)樗?通常)引用一個(gè)對象,而不是一個(gè)類的所有實(shí)例。
所以當(dāng)多個(gè)樣式規(guī)則產(chǎn)生沖突時(shí),系統(tǒng)會選擇更具有針對性(特異性)的樣式規(guī)則進(jìn)行使用。而為了確定規(guī)則的特異性,Qt樣式表遵循CSS2規(guī)范:
選擇器的特異性計(jì)算如下:
統(tǒng)計(jì)選擇器中ID屬性的數(shù)量(= a)
計(jì)算選擇器中其他屬性和偽類的數(shù)量(= b)
計(jì)算選擇器中元素名稱(如LI、OL等元素名稱)的數(shù)量(= c)
然后根據(jù)a*100+b*10+c計(jì)算出相應(yīng)規(guī)則的特異性值。特異性值越大匹配性越好。
例如:
- * {} /* a=0 b=0 c=0 -> specificity = 0 */
- LI {} /* a=0 b=0 c=1 -> specificity = 1 */
- UL LI {} /* a=0 b=0 c=2 -> specificity = 2 */
- UL OL+LI {} /* a=0 b=0 c=3 -> specificity = 3 */
- H1 + *[REL=up]{} /* a=0 b=1 c=1 -> specificity = 11 */
- UL OL LI.red {} /* a=0 b=1 c=3 -> specificity = 13 */
- LI.red.level {} /* a=0 b=2 c=1 -> specificity = 21 */
- #x34y {} /* a=1 b=0 c=0 -> specificity = 100 */
改示例主要是對Qt自帶的Style sheet示例的修改。
- //.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QMainWindow>
- #include <QApplication>
- class Widget : public QMainWindow
- {
- Q_OBJECT
- public:
- Widget(QMainWindow *parent = nullptr);
- ~Widget();
- };
- #endif // WIDGET_H
- //.cpp
- #include "widget.h"
- #include <QFrame>
- #include <QLabel>
- #include <QComboBox>
- #include <QSpinBox>
- #include <QLineEdit>
- #include <QTextEdit>
- #include <QCheckBox>
- #include <QRadioButton>
- #include <QHBoxLayout>
- #include <QGridLayout>
- #include <QGroupBox>
- #include <QStringList>
- #include <QDialogButtonBox>
- #include <QFile>
- #include <QMessageBox>
- Widget::Widget(QMainWindow *parent)
- : QMainWindow(parent)
- {
- QLabel *label1 = new QLabel("姓名:");
- label1->setProperty("class","mandatory");
- QComboBox *cmb1 = new QComboBox();
- cmb1->setObjectName("name");
- cmb1->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed); //默認(rèn)為雙Preferred
- QLabel *label2 = new QLabel("性別:");
- QRadioButton *rbtn1 = new QRadioButton("男");
- QRadioButton *rbtn2 = new QRadioButton("女");
- QHBoxLayout *hlayout1 = new QHBoxLayout();
- hlayout1->addWidget(rbtn1);
- hlayout1->addWidget(rbtn2);
- hlayout1->addStretch(1);
- QGroupBox *groupBox = new QGroupBox();
- groupBox->setLayout(hlayout1);
- QLabel *label3 = new QLabel(" 年齡:");
- QSpinBox *spinBox1 = new QSpinBox();
- spinBox1->setValue(22);
- spinBox1->setRange(18,45);
- spinBox1->setSingleStep(1);
- QHBoxLayout *hlayout2 = new QHBoxLayout();
- hlayout2->addWidget(spinBox1);
- hlayout2->addStretch(1);
- QLabel *label4 = new QLabel("密碼:");
- QLineEdit *lineEdit1 =new QLineEdit("Password");
- lineEdit1->setEchoMode(QLineEdit::Password);
- QLabel *label5 = new QLabel(" 國家:");
- QComboBox *cmb2 = new QComboBox();
- QStringList str;
- str<<"中國"<<"埃及"<<"法國"<<"德國"<<"意大利"<<"印度"<<"挪威"<<"巴基斯坦";
- cmb2->addItems(str);
- cmb2->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
- QLabel *label6 = new QLabel("職業(yè):");
- QTextEdit *textEdit1 = new QTextEdit("開發(fā)者");
- textEdit1->append("學(xué)生");
- textEdit1->append("創(chuàng)業(yè)者");
- textEdit1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
- QCheckBox *checkBox = new QCheckBox("我接受這些條款和條件!");
- QDialogButtonBox *dialogBtnBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
- QGridLayout *glayout = new QGridLayout();
- glayout->addWidget(label1,0,0);
- glayout->addWidget(cmb1,0,1);
- glayout->addWidget(label2,1,0);
- glayout->addWidget(groupBox,1,1);
- glayout->addWidget(label3,2,0);
- glayout->addLayout(hlayout2,2,1);
- glayout->addWidget(label4,3,0);
- glayout->addWidget(lineEdit1,3,1);
- glayout->addWidget(label5,4,0);
- glayout->addWidget(cmb2,4,1);
- glayout->addWidget(label6,5,0);
- glayout->addWidget(textEdit1,5,1);
- glayout->addWidget(checkBox,6,0,1,2);
- glayout->addWidget(dialogBtnBox,7,0,1,2);
- glayout->setSizeConstraint(QLayout::SetDefaultConstraint);
- QString dirPath = QApplication::applicationDirPath();
- //QString fileName = dirPath+"/coffee.qss";
- QString fileName = "../qss/qss/coffee.qss";
- QFile qssFile(fileName);
- if(!qssFile.open(QFile::ReadOnly))
- {
- QMessageBox::warning(this,"打開文件失敗",fileName+"打開失敗");
- exit(1);
- }
- QString qssString = qssFile.readAll();
- this->setStyleSheet(qssString);
- QFrame *mframe = new QFrame();
- mframe->setLayout(glayout);
- this->setCentralWidget(mframe);
- }
- Widget::~Widget()
- {
- }
.qss文件
Widget { background-color: beige; } /* Nice Windows-XP-style password character. */ QLineEdit[echoMode="2"] { lineedit-password-character: 9679; } /* We provide a min-width and min-height for push buttons so that they look elegant regardless of the width of the text. */ QPushButton { background-color: palegoldenrod; border-width: 2px; border-color: darkkhaki; border-style: solid; border-radius: 5; padding: 3px; min-width: 9ex; min-height: 2.5ex; } QPushButton:hover { background-color: khaki; } /* Increase the padding, so the text is shifted when the button is pressed. */ QPushButton:pressed { padding-left: 5px; padding-top: 5px; background-color: #d0d67c; } QLabel, QAbstractButton { font: bold; } /* Mark mandatory fields with a brownish color. */ .mandatory { color: brown; } /* Bold text on status bar looks awful. */ QStatusBar QLabel { font: normal; } QStatusBar::item { border-width: 1; border-color: darkkhaki; border-style: solid; border-radius: 2; } QComboBox, QLineEdit, QSpinBox, QTextEdit, QListView { background-color: cornsilk; selection-color: #0a214c; selection-background-color: #C19A6B; } QComboBox::drop-down#name{ image:url(:/res/drop_down.jpg); } QListView { show-decoration-selected: 1; } QListView::item:hover { background-color: wheat; } /* We reserve 1 pixel space in padding. When we get the focus, we kill the padding and enlarge the border. This makes the items glow. */ QFrame{ /*background-color: beige;*/ margin:10px; } QLineEdit, QFrame { border-width: 2px; padding: 1px; border-style: solid; border-color: darkkhaki; border-radius: 5px; } /* As mentioned above, eliminate the padding and increase the border. */ QLineEdit:focus, QFrame:focus { border-width: 3px; padding: 0px; } /* A QLabel is a QFrame ... */ QLabel { border: none; padding: 0; background: none; } /* A QToolTip is a QLabel ... */ QToolTip { border: 2px solid darkkhaki; padding: 5px; border-radius: 3px; opacity: 200; } /* Nice to have the background color change when hovered. */ QRadioButton:hover, QCheckBox:hover { background-color: wheat; } /* Force the dialog's buttons to follow the Windows guidelines. */ QDialogButtonBox { button-layout: 0; }
效果圖:
聯(lián)系客服