例如由美工提供左邊的按鈕背景圖,我們需要實現右邊的效果,並且背景隨着按鈕的大小自動變化:
圓角按鈕背景
圓角按鈕效果
前面我們學習過的和修改背景相關的知識有 background-image,如果背景圖和按鈕一樣大時使用 background-image 沒有任何問題,但是當按鈕和背景圖不一樣大時,背景圖要么顯示不全,要么重復平鋪到按鈕上,顯然滿足不了這里的需求。不過 QSS 也支持 border-image
,使用 border-image
就能很快的做出上面的效果:
.QPushButton {
border-width: 12px 12px 12px 12px;
border-image: url(:/img/round-button.png) 12 12 12 12 repeat stretch;
min-height: 24px; /* 避免按鈕太小 */
padding: -10px 0 -10px 0; /* 調整文字與邊界的距離 */
}
border-width
后面的四個數字按順序分別為:
border-top
的高 12pxborder-right
的寬 12pxborder-bottom
的高 12pxborder-left
的寬 12px
border-image
后面的參數按順序分別為:
- 背景圖的路徑,可以是絕對路徑,相對路徑,資源文件里的路徑
- 四個數字按順序分別為
- 背景圖中
最上面的 12px 高的圖像
填充到 Widget 的border-top
- 背景圖中
最右邊的 12px 寬的圖像
填充到 Widget 的border-right
- 背景圖中
最下邊的 12px 高的圖像
填充到 Widget 的border-bottom
- 背景圖中
最左邊的 12px 寬的圖像
填充到 Widget 的border-left
- 背景圖中
- 數字后面的第一個參數 repeat|round|stretch 指定
水平方向的縮放或者平鋪
- 數字后面的第二個參數 repeat|round|stretch 指定
垂直方向的縮放或者平鋪
注意
:border-width
后的數字有單位border-image
后的數字沒有單位min-height
和padding
不是必須的,這里用來細微的調節按鈕的效果
Border-Image 從名字上看,像是用來圖片來設置 border 的,其實是用圖片來設置整個 widget 的背景的,我曾經就被這個名字迷惑過
Border-Image 原理
下圖是理解 Border-Image 的核心,又稱為九宮格,看懂這個圖,也就能理解 Border-Image 了:
背景圖
Widget