QSS 基础
如果你會 CSS,那么 QSS 對你來說將會非常簡單,QSS 的語法和 CSS 的愈發非常相似,但也有些不同,有些 CSS 的東西在 QSS 里被去掉了,QSS 也加了些自己特有的東西,不過大多數還是差不多的,下面以修改 QLabel 的樣式為例,學習 QSS 的基礎語法。
QLabel {/* 相當于 font: bold 50px "Snell Roundhand"; */font-size: 50px;font-weight: bold;font-family: "Snell Roundhand";/* 文本的顏色 */color: white;/* 相當于 background: lightgray url(:/resources/horizontal-add-line.png); */background-color: lightgray;background-image: url(:/resources/horizontal-add-line.png);/* 還能使用漸變 */background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #FFFFFF, stop: 1 #BB000000);/* 相當于 border: 5px solid gray; */border-width: 5px;border-color: gray;border-style: solid;/* 邊框圓角 */border-radius: 10px;padding: 5px;margin: 10px; }下圖是上面 QSS 的效果圖:
下面具體介紹一下 QSS 的基礎語法:
- 設置字體用 font, 語法為:
設置字體用 font-style, font-size, font-weight, font-family(和 CSS 一樣,如果字體名字有空格則用雙引號引起來,多個字體名字間用逗號分隔,如果第一個字體找不到則用第二個,第二個找不到則用第三個,依此類推)
- 設置文本顏色用 color
- 設置背景顏色用 background-color
- 設置背景使用 background,可以設置如下屬性:
- background-color
- background-position
- background-size
- background-repeat
- background-origin
- background-clip
- background-attachment
- background-image
-
url 中的路徑可以是:
- 資源文件的路徑
- 絕對路徑
- 相對于可執行文件的相對路徑
-
設置背景圖片用 background-image(先繪制背景色,然后再繪制背景圖片,如果背景圖片是半透明的就可以看到背景色了),默認水平和垂直重復平鋪滿整個 widget,同時一起設置的還可以有 background-repeat、background-position、background-attachment
-
background-repeat,可選的值有:
- repeat-x:水平方向重復
- epeat-y:垂直方向重復
- no-repeat:不重復
-
background-position,可選的值有:
- top left
- top center
- top right
- center left
- center center
- center right
- bottom left
- bottom center
- bottom right
- xpos ypos
-
background-attachment,可選的值有:
- scroll:背景隨滾動條滾動
- fixed:背景不隨滾動條滾動
-
設置背景還可以用 border-image,請參考 Border Image 一節
-
設置邊框用 border-width, border-style, border-color
-
設置邊框用 border,語法為:
- 設置圓角邊框用 border-radius,但是如果給定的半徑大于對應邊的一半,圓角就沒有效果了,在 CSS 里沒有這個問題
- 支持漸變 gradient: qlineargradient、qradialgradient、qconicalgradient,漸變的坐標不是用像素表示,而是把漸變的坐標的最小值定義為 0,最大值定義為 1,這種技術又叫 Normalization,通俗點說就是用比例表示,開始處用 0 表示,結束處用 1 表示,不管漸變的范圍是 200px 還是 500px,按比例都能計算出實際的像素坐標,這樣做的好處是,不需要關心漸變的像素坐標范圍的具體數值。如果不用 Normalization 技術,widget 的大小一變化,就需要修改 QSS 里的坐標值。
漸變效果比較復雜,可以使用 Qt Desginer 的 QSS 編輯器來幫助我們可視化的實現復雜的漸變效果,如下圖:
- Padding 和 margin 參考盒子模型一節
- 設置圖標,如 QToolButton 的圖標:
- 設置寬度用 width,高度用 height,設置 subcontrol 的時候比較有用
- 設置最小寬度用 min-width,最小高度用 min-height(是 content rectangle 的寬和高)
- 設置最大寬度用 max-width,最大高度用 max-height
- 遺憾的是,QSS 不支持陰影
- 使用 qproperty-xxx 進行設置,因為在 QWidget 及其子類中使用宏 Q_PROPERTY 定義的 WRITE 函數可以在 QSS 中訪問:
- text-align 不支持 QLable,但設置 QLabel 的文本居中可以這樣:qproperty-alignment: AlignCenter
- 甚至可以在 QSS 中設置 QLabel,QPushButton 等的文本:qproperty-text: 'It is amazing',太魔性了
- 設置 QLabel 的 word wrap: qproperty-wordWrap: true
- 設置對齊方式:
- qproperty-alignment: 'AlignCenter's
- qproperty-alignment: 'AlignBottom | AlignRight'
- 設置按鈕:
- 設置 flat: qproperty-flat: true
- 設置圖標: qproperty-icon: url(:/resources/tabset-left.png)
- QWidget 及其子類還有很多 Q_PROPERTY 定義的 WRITE 函數,想知道就去查幫助文檔吧
- 我們也可以使用宏 Q_PROPERTY 定義自己的 WRITE 函數,然后在 QSS 中使用
- 不過 qproperty-xxx 也不是萬能的,在 :hover, :pressed 等偽類選擇器中不生效
上面的 QSS 的雖然只是基礎,但是很重要,大多數的時候都要用到它們,用來修改 QLabel,QPushButton,QFrame,QWidget 等的樣式還基本夠用了,不過如果要修改復雜一點的 widget 的樣式,如 QSpinBox,QScrollBar 等,上面的知識是不夠的,要想掌握好 QSS,還必須了解 QSS 的選擇器,盒子模型,Border-Image,Subcontrol 等,這些在后面都有專門的章節介紹。
QWidget 等的樣式還基本夠用了,不過如果要修改復雜一點的 widget 的樣式,如 QSpinBox,QScrollBar 等,上面的知識是不夠的,要想掌握好 QSS,還必須了解 QSS 的選擇器,盒子模型,Border-Image,Subcontrol 等,這些在后面都有專門的章節介紹。
原文地址:https://qtdebug.com/qtbook-qss-base/ 博主狗哥的其他博文也寫的非常好,從他這里學到了很多,需要的同學可以去看看https://qtdebug.com/qtbook/
總結
- 上一篇: 计算机输入码分类,汉字输入码种类数字编码
- 下一篇: 现代办公自动化教程 计算机基础教育系列,