Qt常用QSS集合

Qt拿來(lái)畫控件還是很方便的,其中除了重寫paint() 函數(shù)外,最常用的就是控件的樣式表qss了裆操。本文簡(jiǎn)單介紹下QSS官地,同時(shí)記錄下各種QSS日常騷操作酿傍。

QSS介紹

QSS簡(jiǎn)介

QSS稱為Qt Style Sheets也就是Qt樣式表,它是Qt提供的一種用來(lái)自定義控件外觀的機(jī)制驱入。QSS大量參考了CSS的內(nèi)容赤炒,只不過(guò)QSS的功能比CSS要弱很多,體現(xiàn)在選擇器要少亏较,可以使用的QSS屬性也要少很多莺褒,并且并不是所有的屬性都可以用在Qt的所有控件上。

QSS的語(yǔ)法規(guī)則

基本和CSS相同雪情,只是有的屬性QSS中沒(méi)有遵岩,相當(dāng)于CSS的子集。

QSS的選擇器類型

選擇器 栗子 說(shuō)明
通配選擇器 * 匹配所有的控件
類型選擇器 QPushButton 匹配所有QPushButton和其子類的實(shí)例
屬性選擇器 QPushButton[flat="false"] 匹配所有flat屬性是false的QPushButton實(shí)例,注意該屬性可以是自定義的屬性尘执,不一定非要是類本身具有的屬性
類選擇器 .QPushButton 匹配所有QPushButton的實(shí)例舍哄,但是并不匹配其子類
ID選擇器 #myButton 匹配所有id為myButton的控件實(shí)例,這里的id實(shí)際上就是objectName指定的值
包含選擇器 QDialog QPushButton 所有QDialog容器中包含的QPushButton誊锭,不管是直接的還是間接的
子選擇器 QDialog > QPushButton 所有QDialog容器下面的QPushButton表悬,其中要求QPushButton的直接父容器是QDialog

另外上面所有的這些選擇器可以聯(lián)合使用,并且支持一次設(shè)置多個(gè)選擇器類型丧靡,用逗號(hào)隔開(kāi),同CSS一樣窘行。

QSS子控件

QSS為很多復(fù)雜的復(fù)合控件提供了子控件的定義饥追,以方便對(duì)這些復(fù)合控件的各個(gè)部分進(jìn)行樣式設(shè)置,具體使用下面說(shuō)明罐盔。

QSS偽狀態(tài)

QSS的偽狀態(tài)選擇器實(shí)際上與CSS中的類似但绕,是以冒號(hào)開(kāi)頭的一個(gè)選擇表達(dá)式,他限制了當(dāng)控件在某一種狀態(tài)下的時(shí)候才能應(yīng)用QSS規(guī)則惶看,偽狀態(tài)只能描述一個(gè)控件的狀態(tài)捏顺,或者是一個(gè)復(fù)合控件中的子控件的狀態(tài)。下面列出常用的偽狀態(tài):

狀態(tài) 說(shuō)明
:active 當(dāng)小部件駐留在活動(dòng)窗口中時(shí)纬黎,將設(shè)置此狀態(tài)
:checked 該控件被選中時(shí)候的狀態(tài)
:hover 鼠標(biāo)在控件上方
:pressed 該控件被按下時(shí)的狀態(tài)
:disabled 該控件禁用時(shí)的狀態(tài)
:first 該控件是第一個(gè)(列表中)
:focus 該控件有輸入焦點(diǎn)時(shí)
:has-children 該控件有孩子幅骄。例如,QTreeView中包含子項(xiàng)目的控件
:open 該控件處于打開(kāi)狀態(tài)本今。例如拆座,QTreeView中的擴(kuò)展項(xiàng),或打開(kāi)菜單的QComboBox或QPushButton
:unchecked 該控件未被選中

QSS代碼片段

單個(gè)控件

QPushButton{        /*按鈕上圖標(biāo)下文字*/
    text-align:bottom ;
    image-position:top;
    color: #666666;
    border:none;
    image: url(:xxxxx.png);
}

QPushButton{         /*按鈕自適應(yīng)拉伸背景*/
border-width: 2px 15px 2px 15px;
border-image: url(:/resource/icon/button_nomal.png) 2 15 2 15 repeat stretch;
color:#3288E8;
}

QPushButton{        /*按鈕選中帶下劃線*/
border:none;
border-width:5;
border-bottom-style:solid;
border-color:transparent;
color:#666666;
}
QPushButton:checked{
color:#3288E8;
border-color: #3288E8;
}

QPushButton{      /*按鈕左文字右圖標(biāo)*/
    background-image:url(:/resource/btn.png);
    background-repeat:norepeat;
    background-position:right;
    text-align:right;
    border:none;
    color:white;    
    padding-right:35px;
}

QPushButton {  //按鈕漸變背景
    font-size:12px;
    border-radius:2px;
    color:rgba(51,51,51,1);
    background:qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(242,242,242,1), stop:1 rgba(255,255,255,1));
    border:1px solid rgba(221,221,221,1);
}

QWidget#line{ //在Widget某一邊畫分割線
    background-color:white;
    border-left:none;
    border-top:none;
    border-right:none;
    border-bottom:1px solid rgba(216,216,216,1);
}

含子控件

/**************************************CheckBox*********************************************/
QCheckBox::indicator:unchecked{
image: url(:/resource/chebox_off.png)
}

QCheckBox::indicator:checked{
image: url(:/resourcechebox_on.png)
}
/**************************************CheckBox*********************************************/


/**************************************QTabBar*********************************************/
QTabBar::tab {
    color: #666666; 
    height:40px; 
    width:100px;
} 
QTabBar::tab:selected {
    color: #333333; 
    font-weight:bold
}
 QTabBar::tab:hover {
    color: #666666;
}
/**************************************QTabBar*********************************************/


/**************************************滑動(dòng)條*********************************************/
QSlider {
    background: rgb(170, 170, 170);
    padding: 2px;
    height: 40px;
}
QSlider::groove:horizontal {
    subcontrol-origin: content;
    background: rgb(76, 76, 76);
    
    /* the groove expands to the size of the slider by default. 
    by giving it a height, it has a fixed size */
    height: 20px;
}
QSlider::handle:horizontal {
    background-color: rgb(50, 50, 50);
    width: 40px;
    border-radius: 20px;
    
    /* handle is placed by default on the contents rect of the groove. 
    Expand outside the groove */
    margin: -10px 0;
}
QSlider::sub-page:horizontal {
    background: #999;
    margin: 5px;
    border-radius: 5px;
}
QSlider::add-page:horizontal {
    background: #666;
    margin: 5px;
    border-radius: 5px;
}
/**************************************滑動(dòng)條*********************************************/


/**************************************下拉框*********************************************/
QComboBox{
border:0px; 
background-color:transparent;
color:#333333; 
}
QComboBox::down-arrow{
image:none;
}
QComboBox::drop-down{
width:0px; 
border:0px;
}
QComboBox QAbstractItemView {
color:#333333;
border: 1px solid #DDDDDD;
background-color:white;
selection-color:white;
selection-background-color: rgb(0, 102, 96);
}
/**************************************下拉框*********************************************/


/**************************************滾動(dòng)條*********************************************/
QScrollBar:horizontal {
    height: 16px;
    border-width: 0px 10px 0px 10px;
    border-image: url(:/img/horizontal-track.png) 0 10 0 10 repeat stretch;
    margin-left: 6px;
    margin-right: 16px;
    padding-right: 4px;
}
QScrollBar::handle:horizontal {
    min-width: 40px;
    border-width: 0 17px 0 17px;
    border-image: url(:/img/horizontal-handle.png) 0 17 0 17 repeat repeat;
}
QScrollBar::sub-line:horizontal {
    width: 20px;
    height: 17px;
    subcontrol-position: left;
    subcontrol-origin: margin;
    background-image: url(:/img/horizontal-sub-line.png)
}
QScrollBar::add-line:horizontal {
    width: 20px;
    height: 17px;
    subcontrol-position: right;
    subcontrol-origin: border;
    background-image: url(:/img/horizontal-add-line.png)
}
QScrollBar:vertical {
    width: 16px;
    border-width: 10px 0px 10px 0px;
    border-image: url(:/img/vertical-track.png) 10 0 10 0 repeat repeat;
    margin-top: 6px;
    margin-bottom: 16px;
    padding-bottom: 6px;
}
QScrollBar::handle:vertical {
    min-height: 40px;
    border-width: 17px 0px 17px 0px;
    border-image: url(:/img/vertical-handle.png) 17 0 17 0 repeat repeat;
}
QScrollBar::sub-line:vertical {
    width: 17px;
    height: 22px;
    subcontrol-position: top left;
    subcontrol-origin: margin;
    background-image: url(:/img/vertical-sub-line.png)
}
QScrollBar::add-line:vertical {
    width: 17px;
    height: 22px;
    subcontrol-position: bottom;
    subcontrol-origin: border;
    background-image: url(:/img/vertical-add-line.png)
}
/**************************************滾動(dòng)條*********************************************/

/**************************************滑塊*********************************************/
QSlider {
    height: 20px;
}

QSlider::groove:horizontal {
    subcontrol-origin: content;
    background: transparent;
    height: 20px;
}

QSlider::handle:horizontal {
    background-color: rgb(50, 50, 50);
    width: 20px;
    border-radius: 10px;
}

QSlider::sub-page:horizontal {
    background: #0078FF;
    margin: 7px;
    border-radius: 3px;
}

QSlider::add-page:horizontal {
    background: #999999;
    margin: 7px;
    border-radius: 3px;
}
/**************************************滑塊*********************************************/

持續(xù)更新ing...

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冠息,一起剝皮案震驚了整個(gè)濱河市挪凑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逛艰,老刑警劉巖躏碳,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異散怖,居然都是意外死亡菇绵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門镇眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咬最,“玉大人,你說(shuō)我怎么就攤上這事欠动〉ぞ鳎” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铆遭。 經(jīng)常有香客問(wèn)我硝桩,道長(zhǎng),這世上最難降的妖魔是什么枚荣? 我笑而不...
    開(kāi)封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任碗脊,我火速辦了婚禮,結(jié)果婚禮上橄妆,老公的妹妹穿的比我還像新娘衙伶。我一直安慰自己,他們只是感情好害碾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布矢劲。 她就那樣靜靜地躺著,像睡著了一般慌随。 火紅的嫁衣襯著肌膚如雪芬沉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天阁猜,我揣著相機(jī)與錄音丸逸,去河邊找鬼。 笑死剃袍,一個(gè)胖子當(dāng)著我的面吹牛黄刚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播民效,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼憔维,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了畏邢?” 一聲冷哼從身側(cè)響起埋同,我...
    開(kāi)封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棵红,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咧栗,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逆甜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了致板。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片交煞。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖斟或,靈堂內(nèi)的尸體忽然破棺而出素征,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布御毅,位于F島的核電站根欧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏端蛆。R本人自食惡果不足惜凤粗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望今豆。 院中可真熱鬧嫌拣,春花似錦、人聲如沸呆躲。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)插掂。三九已至灰瞻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間燥筷,已是汗流浹背箩祥。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肆氓,地道東北人袍祖。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谢揪,于是被迫代替她去往敵國(guó)和親蕉陋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • HTML 5 HTML5概述 因特網(wǎng)上的信息是以網(wǎng)頁(yè)的形式展示給用戶的拨扶,因此網(wǎng)頁(yè)是網(wǎng)絡(luò)信息傳遞的載體凳鬓。網(wǎng)頁(yè)文件是用...
    阿啊阿吖丁閱讀 3,866評(píng)論 0 0
  • QT樣式表單 QT的樣式表單允許我們?cè)趯?duì)程序不做任何代碼上的更改的情況下輕松改變應(yīng)用程序的外觀。 其思想來(lái)源于網(wǎng)頁(yè)...
    勿丶忘初心閱讀 7,502評(píng)論 0 6
  • 坐在黃昏里患民,什么也不做缩举,就這么閑閑地坐著,就這么閑閑地想著匹颤。透過(guò)咖啡屋明亮的落地窗仅孩,看著太陽(yáng)慢慢落下去,看...
    冰夫閱讀 453評(píng)論 0 0