天天看點

Qt掃盲-QSS概述一、概述二、詳細

QSS概述

  • 一、概述
  • 二、詳細

一、概述

QSS 其實是Qt樣式表,Qt樣式表是Qt界面的一種強大的機制,除了通過繼承QStyle已經可以實作的功能外,它還允許您自定義視窗元件的外觀。Qt樣式表的概念、術語和文法很大程度上受到HTML層疊樣式表(CSS)的啟發。功能和CSS的基本一樣,大家應該也是有CSS 的基本基礎,那寫QSS就很容易的

注意:如果Qt樣式表與設定視窗元件外觀的函數在同一個視窗元件上使用,例如在QSS裡面來設定字型,背景之類的和C++裡面通過QWidget::setFont()或QTreeWidgetItem::setBackground()方法設定是一樣的,如果設定發生了沖突,樣式表将優先被使用。

二、詳細

樣式表是一種文本文法,其實就是一串有文法的字元串。Qt能夠解析這個QSS來設定到每個視窗的樣式。可以使用QApplication::setStyleSheet()在整個應用程式上設定,也可以使用QWidget::setStyleSheet()在特定的小部件(及其子部件)上設定。如果在不同的級别上設定了幾個樣式表,Qt将從所有設定的樣式表中派生有效的樣式表。這就是所謂的級聯。和CSS 的效果一樣。

例如,下面的樣式表指定所有QLineEdits都應該使用黃色作為背景色,所有 QCheckbox都應該使用紅色作為文本顔色:

QLineEdit { background: yellow }
QCheckBox { color: red }
           

在定制視窗外觀的時候,樣式表比QPalette強大得多。例如,可能很容易将QPalette::Button角色設定為紅色,以獲得紅色按鈕。然而,QPalette這并不能保證對所有樣式都有效,因為樣式可能受到不同平台指南的限制,并且(在Windows和macOS系統上)也會受到本地主題引擎的限制。

樣式表可以完成各種單獨使用QPalette難以或不可能執行的自定義。如果你想要黃色背景的必填項,紅色文本的按鈕,或花裡胡哨的複選框,樣式表是答案。

樣式表應用于目前小部件樣式之上,這意味着您的應用程式将盡可能看起來是原生的,但任何樣式表限制都将被考慮在内。與調色闆不同,樣式表完全設定所見即所得:如果你将一個QPushButton的背景色設定為紅色,你可以保證這個按鈕在所有樣式、所有平台上都有紅色背景。

此外,Qt Designer還提供了樣式表內建,可以很容易地在不同的單個樣式中檢視樣式表的效果。一般是在調試的時候使用,調試好之後,我們一般會把這些樣式集合再一個檔案裡面,這樣就有一個基礎的一套樣式代碼,以後換膚的話其實就可以直接來在這個基礎上修改即可。

此外,樣式表可以用來為應用程式提供獨特的外觀,而不必繼承QStyle的子類。這樣的好處就是在于不用大量的繼承QStyle然後重新定制,開發效率就能大大提高。例如,我們可以為單選按鈕和複選框指定任意圖像邊框或者背景,使用這種技術,還可以實作通常需要子類化幾個樣式類的小定制,例如指定一個樣式提示。下面描述的樣式表示例定義了兩個不同的樣式表,您可以随意嘗試和修改它們。

Qt掃盲-QSS概述一、概述二、詳細

當一個樣式表處于活動狀态時,其實就是被使用中嘛,QWidget::style()傳回的QStyle是一個包裝器“樣式表”樣式,而不是特定于平台的樣式。包裝器樣式確定任何活動樣式表都可以在不同平台的外觀保持一緻,否則将繪圖操作轉發到底層的、特定于平台的樣式(例如,Windows上的qwindowsviststyle,qfusionstyle等)。

繼續閱讀