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; }
但這種方法有缺陷,一般仍是按屬性分比較好