此次講Qt Style Sheet(QSS),QSS是一種與CSS相似的語言,實際上這二者幾乎徹底同樣。既然談到CSS咱們就有必要說一下盒模型。git
在樣式中,每個UI控件均可以抽象成一個盒模型:github
盒模型由4個同心矩形組成,從外到內分別是外邊距、邊界、內襯和內容,大部分UI視覺內容都包含在內容矩形中。默認狀況下,前三個矩形的大小屬性都是0,所以這四個矩形都重疊成一個了。這裏與前三個大小相關的屬性有:佈局
QSS與CSS類似,所以這裏只大概介紹QSS的特色:學習
::
)與Q 的子控件寫法衝突,所以改用--
來表示命名空間。這裏咱們經過一個示例程序來接觸QSS,由於實例程序涉及多個控件但咱們篇幅有限,咱們只介紹菜單相關的樣式設置。菜單分爲兩部分:菜單欄(QMenuBar)、菜單(QMenu)。url
咱們把菜單欄寬度設置成大於等於菜單item的寬度60px(這裏的width不指代整個菜單欄的寬度,比較奇怪),防止item的寬度被菜單欄的寬度限制,而且設置灰色點邊框。spa
QMenuBar { width:60px; background-color:white; border:1px dotted gray; }
item這裏代指菜單欄上的每一項菜單,咱們設置邊框位groove以使其看起來有凹凸效果;設置margin-right,這樣兩個item之間會有合適的間隔;咱們還在不一樣的狀態下設置不一樣的背景顏色,這樣交互上比較友好。code
QMenuBar::item { height:15px; width:60px; background:transparent; border:2px groove gray; margin-right:1px; } QMenuBar::item:selected { color:green; background-color:rgb(236, 242, 245); } QMenuBar::item:pressed { color:green; background-color:rgb(233, 227, 227); }
菜單咱們設置成與菜單欄同樣;菜單的item指代每個菜單選項,咱們對其設置合適的margin和padding大小,border、item的selected和pressed狀態設置成菜單欄的樣式,使其看起來佈局空間合理且與菜單欄一致:對象
QMenu { background-color:white; border:1px solid rgb(0, 171, 255); padding:1px; } QMenu::item { height:15px; width:60px; background-color:white; margin:1px; padding:2px 2px 2px 20px; border:2px groove gray; } QMenu::item:selected { color:green; background-color:rgb(236, 242, 245); } QMenu::item:pressed { color:green; background-color:rgb(233, 227, 227); }
咱們重繪菜單之間的間隔條(separator),簡單的用淺藍色填充1像素高的背景:blog
QMenu::separator { height:1px; margin:1px; background-color:lightblue; }
菜單的選中指示框和子菜單咱們用圖片來顯示,圖片選用png格式,保持透明通道,使其與背景一致:圖片
QMenu::indicator:checked { width:10px; height:10px; margin-left:3px; border:0px solid blue; image:url(:/checked-icon.png); } QMenu::right-arrow { width:15px; height:15px; image:url(:/right-arrow.png); }
程序的完整運行結果以下:
代碼見連接。
優勢:
缺點: