QT面板 QSS 程式設計

2021-06-06 23:00:15 字數 2021 閱讀 9196

借用css 的靈感, qt也支援qt自己的css, 簡稱qss。同css 相似,qss的主要功能與最終目的都是能使介面的表現與介面的元素分離,即質與形的分離,就如同乙個人可以在不同的時候穿上不同的衣服一樣,css機制的引入,使得設計一種**與介面控制項分離的軟體成為可能,應用程式也能像web介面那樣隨意地改變外觀。

一、qss語法

同css一樣,他也有由乙個selector與乙個declaration組成,selector指定了是對哪乙個控制項產生效果,而declaration才是真正的產生作用的語句。如:

qpushbutton

qpushbutton指定了是對所有的qpushbutton或是其子類控制項(如使用者定義的mypushbutton)產生影響,而color:red表明所有的受影響控制項的前景色都為red。

除了「類名」,「物件名」,「qt屬性名」這三樣東西是大小寫敏感的外其他的東西都是大小寫不敏感的,如color與color代表同一屬性。

如果有幾個selector指定了相同的declaration, 可以使用逗號(,)將各個選擇器分開,如:

qpushbutton, qlineedit, qcombobox

他相當於:

qpushbutton

qlineedit

qcombobox

declaration部份是一系列的(屬性:值)對,使用分號(;)將各個不同的屬性值對分開,使用大括號({})將所有declaration包含在一起。

1、 一般選擇器(selector)

qt支援所有的css2定義的選擇器,其祥細內容可以在w3c的**上查詢

, 其中比較常用的selector型別有:

2、子控制項選擇器

如果你要檢視qt支援哪些子控制項選擇器,可以參考:

3、偽選擇器(pseudo-states)

二、 解決衝突

使用偽選擇器,如hover,press,enabled等,如:按扭「1」是disable了的,qpushbutton:!enabled

所有的型別選擇器都有乙個共同的特性,就是如果有兩個屬性衝突了的話就會以最後出現的乙個為準,如:

qpushbutton

qabstractbutton

由於qpushbutton為qabstractbutton的子類,如果只設定qabstractbutton的可以想像結果是所有的qpushbutton都為gray, 如果只設定qpushbutton的所有qpushbutton都會為red,當兩個都能設定起效的時候,以在文字上最後出現的為準,所以結果為grey

當然其中如果有#指定了object name,他所設定的優先順序是最大的,具體規則可以參考:

,或是qpushbutton#btnonech

qpushbutton

qabstractbutton

雖然qabstractbutton在最後,但是之前有#btnonech指定了qpushbutton「一」的color為red所以最後顯示也是「一」為red。

三、級聯效應

如果我們對乙個控制項設定stylesheet為:

qpushbutton* mypushbutton;

mypushbutton->setstylesheet("* ");

其實他和設定為:mypushbutton->setstylesheet("color: blue");

效果相同,只是後一種設定不會對qpushbutton的子類產生作用,但第一種卻會。

四、繼承性

如果在程式裡面使用q_property設定的屬性,可以在qss裡面使用:qproperty-的形式來訪問並設定值。如:

mylabel

mygroupbox

qpushbutton

如果屬性引用到的是乙個由q_enums申明的enum 時,要引用其屬性名字要用定義的名稱而不是數字。

七、建立方法

首先我們新建乙個文字文件,字尾名改為qss,然後用文字編輯器比如記事本開啟它,將我們設定的style sheets寫進去然後儲存就可以了。

八、引用qss

更多參考:

引用:

QT 呼叫QSS檔案

1 新建乙個工程,並在ui介面放置乙個按鈕 2 準備名稱為style.qss的qss檔案,放在main.cpp同資料夾路徑 qpushbutton 1.在 專案 右鍵 add new qt qt resource file choose 名稱 resources 2.在 resources.qrc ...

Qt中qss的使用

qt支援css樣式表,它是網頁中用來控制顯示的指令碼,功能豐富,可以很方便的實現各種顯示效果。如果想進一步了解其語法以及使用,可訪問www.w3school.com.cn。好在之前在寫 比較熟悉。給乙個控制項新增樣式表,只需呼叫其setstylesheet即可,傳入將樣式內容作為字串傳入。一般為了方...

Qt筆記 qss定製QCalendarWidget

由於qcalendarwidget是qt的一種複雜控制項,故除了qss外,還需要進行一些 編寫以達到定製效果 if p inherits qcalendarwidget 更改當前的語言顯示 csq pcalendarwidget setlocale qlocale english 將週日放到前面 p...