1. 程式人生 > 其它 >關於Qt中的qss樣式表需要注意的坑

關於Qt中的qss樣式表需要注意的坑

關於QSS要注意的坑。

  • qss源自css,相當於css的一個子集,主要支援的是css2標準,很多網上的css3的標準的寫法在qss這裡是不生效的,所以不要大驚小怪。
  • qss也不是完全支援所有的css2,比如text-align官方文件就有說明,只支援 QPushButton and QProgressBar,務必看清楚。
  • 有時候偷懶直接來一句 *{xxx},你會發現大部分是應用了,也有小部分或者極個別沒有應用,你可能需要在對應的窗體中 this->setStyleSheet() 來設定。
  • qss的執行是有優先順序的,如果沒有指定父物件,則對所有的應用,比如在窗體widget中 {color:#ff0000;} 這樣會對widget以及widget的所有子物件應用該樣式,這種問題各大群每週都有人問,你會發現各種奇奇怪怪的異樣不正常,怎麼辦呢,你需要指定類名或者物件名,比如 #widget{color:#ff0000;} 這樣就只會對widget物件應用該樣式,另一種寫法 QWidget#widget{color:#ff0000;},只想對窗體本身而不是子控制元件按鈕標籤等 .QWidget{color:#ff0000;} ,具體詳細規則參見官方說明。
  • qss整體來說還是可以的,解析速度效能在Qt5高版本後期比Qt4好很多,尤其是修復了不少qss中的解析繪製BUG。儘管有這樣那樣的BUG,懷著包容的心對待它。
  • qss官方學習地址1:http://47.100.39.100/qtwidgets/stylesheet-reference.html
  • qss官方學習地址2:http://47.100.39.100/qtwidgets/stylesheet-examples.html

Qt樣式表有多種執行機制,主要是考慮到各種需求場景,繼承自QWidget的類和qApp類都支援setStyleSheet方法,還可以統一將樣式表放在檔案,或者將樣式檔案加入到資原始檔。

  • 鬥氣:qss內容寫得到處都是,哪裡需要就寫在哪裡,各種控制元件呼叫 setStyleSheet方法傳入樣式表內容,或者直接對應控制元件滑鼠右鍵彈出選單選擇改變樣式表填入內容;
  • 鬥者:qss內容放在檔案,讀取檔案內容設定樣式表,程式釋出的時候帶上qss檔案;
  • 鬥師:qss檔案作為資原始檔放到qrc檔案,直接編譯到可執行檔案中,防止篡改;
  • 鬥靈:在qss檔案中自定義一些標誌充當變數使用,讀取以後替換對應的變數為顏色值,類似動態換膚;
  • 鬥王:放在檔案容易被篡改,整合到可執行檔案不夠靈活,一旦樣式表更新需要重新編譯檔案,如何做到既能只更新樣式表文件,又不需要重新編譯可執行檔案,又能防止被篡改:採用rcc命令將資原始檔編譯生成二進位制,只需要替換該二進位制檔案即可;
  • 鬥皇:繼承qstyle類自己實現完成所有樣式介面,統一整體風格,大名鼎鼎的UOS系統預設規則就是如此,不允許用樣式表,全部painter繪製;