QSS 書寫規則

2021-07-23 23:47:14 字數 2499 閱讀 5288

借用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的子類產生作用,但第一種卻會。

四、繼承性

與css不同的一點,在css box模型中,如果乙個元素在別一元素的裡面,那麼裡面的元素會自動繼承外面元素的屬性,但

qss裡面不會,如:

或者在應用程式裡面也可以用qwidget::setfont等來設定到子控制項的屬性。

五、namespace衝突

型別選擇器能夠使用到乙個特定的型別,如:

class mypushbutton : public qpushbutton

因為qss

使用qobject::classname來判斷要賦與style sheet的控制項型別,如果乙個使用者定義控制項型別在乙個namespace裡面的話,qobject::classname會返回::的名字,這和子控制項選擇器的語法相衝突,為了解決此問題,使用「--」來代替「::」,比如:

namespace ns

}六、設定對像屬性

如果在程式裡面使用q_property設定的屬性,可以在

qss裡面使用:qproperty-的形式來訪問並設定值。如:

mylabel

mygroupbox

qpushbutton

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

**:

sql書寫規則

表命名是以英文名稱為原則,表示該錶的具體意義,例如商品表可以叫item,商品表可以叫item image。如果公司業務複雜,資料庫過多,schema也比較多,則要根據schema的來命名,例如 在crm下面可以用crm開頭命名crm user.臨時表應該以tmp開頭tmp user,這樣的表一段時間...

makefile學習筆記 書寫規則 規則舉例

20180413 makefile學習筆記 書寫規則 規則舉例 規則包含兩個部分,乙個是依賴關係,乙個是生成目標的方法。在makefile中,規則的順序是很重要的,因為,makefile中只應該有乙個最終目標,其他的目標都是被這個目標所連帶出來的,所以一定要讓make知道你的最終目標是什麼。一般來說...

uBlock的動態規則過濾規則書寫

ublock具有動態和靜態兩種規則,但是它比之前的abp等規則過濾規則強的地方就在於他的動態規則,靜態規則的語法繼承與abp,有興趣的可以去看abp的過濾規則現在主要介紹它的動態規則,這才是讓它變成神器的主要原因 英文文件 語句書寫非常簡單 分為4塊 主機位址 目前正在瀏覽的 載入廣告的源位址 請求...