【Qt學習筆記】14.界面的樣式 (Qt Stylesheet)

1、StyleSheet的基本用法css

StyleSheet : 樣式單ide

Qt中支持StyleSheet技術,將界面的樣式定義分離開來。採用和HTML/CSS相似的形式,使用一個文本文件來單獨定義樣式。函數

一般,用於定義界面樣式的StyleSheet稱爲「皮膚」編碼


StyleSheet的定義:spa

定義一個StyleSheet,前面是類名(稱爲Selector),大括號內是屬性定義,支持/**/註釋語法對象

例如:繼承

/* 以GBK保存 */
QLineEdit
{
    background: yello;
}        // 注意末尾沒有分號

QPushButon, QLineEdit
{
    color: blue;
}                // 注意末尾沒有分號


StyleSheet的使用:it

一、設置全局樣式:io

能夠在main函數中,直接給QApplication設置樣式,此樣式爲全局樣式class

QString style = "QPushbutton{ color: blud; }";
a.setStyleSheet(style);        //a是  QApplication 類型的對象


二、設置窗口樣式:

能夠給某個窗口對象設置樣式

QString style = "QPushbutton{ color: blue; }";
w.setStyleSheet(style);        //w是窗體



樣式的重複定義:

一、對同一個對象調用屢次setStyleSheet,則後設置的生效,先前的設置所有丟棄。(替換)

二、下層的樣式覆蓋上層(疊加)

全局樣式(上層) >>> 窗口樣式 >>> 子窗口樣式(下層)

結果:相同的屬性發生覆蓋,其餘部分保留


皮膚文件:

一般,把樣式的內容存放到一個文本文件裏,而後在程序打開時加載,此文本稱爲皮膚文件

// 在main中讀取皮膚文件的內容
QString style = readfile("skin.css");
a.setStyleSheet(style);

要注意文件的編碼,在中文的Windows上編輯文本文件時,默認的是GBK編碼



2、StyleSheet的語法——Selector

Selector:主體是類名

一、屬性的疊加:在一個stylesheet裏,後寫的定義會覆蓋先寫的定義

二、包含本類和子類的定義

三、同一行中,能夠寫多個類型,以逗號分隔


QPushButton, QLineEdit, QCheckBox
{
    background: color: black;
}



按屬性區分:

假若有8個QPushButton,但想將它們 分紅2組,分別有不一樣的樣式,怎麼實現呢?

一種辦法是寫一個子類繼承QPushButton,而後對這個子類單獨設置樣式,

但這種場景,Qt已經爲咱們提供了一種處理方式

以前或許咱們就注意到,每一個控件都有一個屬性: whatsThis

該屬性就是用來處理這種場景的。


使用:

QPushButton[whatsThis="classic"]
{
    color: green;
}
QPushButton[whatsThis="modern"]
{
    color: red;
}


此外,還有一種區分方法:按ID區分(即object name,變量名)

QPushButton#btnSearch
{
    color: green;
}

但這種方法有缺陷,一般仍是按屬性分比較好