qt--樣式表QSS


使用樣式表與調色板(QPalette)相比,樣式表更強大,因為使用調色板設置的外觀,並不能保證在所有的樣式中都可正常的工作,但樣式表就不受這樣的限制。而且使用樣式表可以更方便的設置界面的外觀,而不用去子類化 QStyle 類
 
可使用 QApplication::setStyleSheet()函數設置整個應用程序的樣式表,使用QWidget::setStyleSheet()設置部件及其子部件的樣式表
#include "win.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet("QPushButton{background-color:red}"); //設置按鈕的背景色
    Win w;
    w.show();
    return a.exec();
}

使整個應用程序的按鈕都是紅色

 

若直接在部件上設置樣式表或針對所有控件類,可忽略選擇器及大括號
#include "win.h"

Win::Win(QWidget *parent)
    : QWidget(parent)
{
    this->resize(400,300);
    QPushButton* button1=new QPushButton("AAA",this);
    button1->move(10,10);
    button1->resize(100,100);
    QPushButton* button2=new QPushButton("BBB",this);
    button2->move(150,10);
    button2->resize(100,100);

    button1->setStyleSheet("background-color:yellow");//省略了選擇器(即 QPushButton)和大括號


}

Win::~Win()
{
}

樣式表語法

Qt 樣式表通常不區分大小寫,除了類名、對象名和 Qt 屬性名稱之外

基本語法規則

①、樣式表由選擇器(通常是某個控件類)和聲明兩部分組成,選擇器指定了受影響的部件,聲明指定了要設置的屬性(注意與 Qt 屬性的區別)。
比如QPushButton { color : blue}
其中 QPushButton 是選擇器,{color: blue}是聲明,color 是需要設置的屬性,blue 是屬性的值。
以上語句表明,QPushButton 及其子類應使用 blue(藍色)作為其前景色
②、指定多個選擇器
可為相同的聲明指定多個選擇器,選擇器之間使用逗號“,”進行分隔,比如QPushButton, QCheckBox, QLineEdit{color: red}
③、指定多個屬性時
使用分號分隔,比如QPushButton{color: red; background-color:blue} //按鈕前景色為紅色,背景色為藍色
④、為含有多個值的屬性指定多個值時
使用空隔分隔,比如QLineEdit{border: 2px solid red} //表示邊框線為 2 像素寬的實線,其顏色為紅色
以上語句的屬性 border 是一種對屬性的簡寫方法,以上語句相當於以下 3 條語句:
QLineEdit{ border-width: 2px;
border-style:solid;
border-color:red }

選擇器

選擇器
示例
說明
全局選擇器
匹配所有部件
類型選擇器
QWidget
匹配 QWidget 及其子類的實例
屬性選擇器
QPushButton[flat =
"false"]
1、匹配 QPushButton 的屬性 flat 等於 false 的實例
2、注意:方括號內的屬性是指 Qt 屬性(即部件的屬性)
3、此選擇器也可用於測試動態屬性(setProperty()函數)。 
4、也可以使用 ~= 代替 = 來測試 QStringList 類型的 Qt 屬性
是否包含給定的 QString
5、注意:如果 Qt 屬性的值在樣式表設置后發生更改,則可能
需要強制重新計算樣式表,其方法是取消樣式表並重新設置它
[]是用來匹配qt屬性的
類選擇器
.QPushButton
匹配 QPushButton 但不匹配其子類的實例,這相當於
*[class~="QPushButton"]
ID選擇器
QPushButton#AAA
匹配objectName屬性為 AAA 的所有 QPushButton 實
后代選擇器
QWidget QPushButton
匹配 QWidget 的后代(子,孫子等)的所有 QPushButton 實例
子對象選擇器
QWidget > QPushButton
匹配 QPushButton 實例,它們是 QWidget 的直接子部件

實例:

    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->resize(111,33);
    QPushButton *pb2=new QPushButton("BBB",this);
    pb2->move(199,22);
     this->setObjectName("www");
    pb1->setObjectName("AAA");
    this->setStyleSheet("QWidget#www > QPushButton#AAA[x=\"22\"][y=\"22\"]{background-color:red}"); /*把對象名為 www 的 QWidget 的直接子部件QPushButton 的背景色設置為紅色,
     其中QPushButton的對象名為AAA,其x屬性和y屬性(即QPushButton的位置)的值都為22  */

 

 

 

實例:動態屬性的使用

    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->resize(111,33);
     QPushButton *pb2=new QPushButton("BBB",this);
     pb2->move(199,22);
     QCheckBox *pc=new QCheckBox("CCC",this);
     pc->move(22,55);
     QCheckBox *pc1=new QCheckBox("DDD",this);
     pc1->move(99,55);

    pb1->setProperty("XXX",true);
    pc1->setProperty("XXX",true);//設置動態屬性
    this->setStyleSheet("*[XXX=true]{background-color:red}"); //把按鈕pb1 和 pc1 的背景色設置為紅色,匹配所有屬性"XXX = true"的部件

 

子控件

復雜控件通常包含一系列子控件,比如QComboBox的下拉按鈕就是子控件,還有QSpinBox的向上/向下箭頭等。對復雜控件使用樣式表設置外觀,可能需要訪問其子控件。樣式表中子控件以“::”符號開頭
注意:QScrollBar、QComboBox 等部件的一個屬性或子控件是自定義的,通常還要自定義其他屬性和子控件。比如,單獨使用 QScrollBar 的子控件不會產生效果,需與滾動條的屬性配合使用
 
子控件
說明
滾動條、滑
塊相關
::handle
QScrollBar、QSplitter、QSlider 的手柄(滑塊)
::groove
QSlider 的凹槽
::corner 
QAbstractScrollArea 中兩個滾動條之間的角落
::add-line
QScrollBar 增加行的按鈕,即按下該按鈕滾動條增加一行
::add-page
QScrollBar 在手柄(滑塊)和增加行之間的區域
::sub-line
QScrollBar 減少行的按鈕,即按下該按鈕滾動條減少一行
::sub-page
QScrollBar 在手柄(滑塊)和減少行之間的區域
箭頭相關
::down-arrow
QComboBox、QHeaderView 排序指示器、QScrollBar、QSpinBox 的向下箭頭
::down-button
QScrollBar 或 QSpinBox 的向下按鈕
::up-arrow
QHeaderView(排序指示器)、QScrollBar、QSpinBox 的向上箭頭
::up-button
QSpinBox 的向上按鈕
::left-arrow
QScrollBar 的左箭頭
::right-arrow
QMenu 或 QScrollBar 的右箭頭
模型/
視圖
::branch
QTreeView 的分支指示符
::section 
QHearderView 的段
::text
QAbstractItemView 的文本
其他
::chunk
QProgressBar 的進度塊
::drop-down
QComboBox 的下拉按鈕
::indicator
QAbstractItemView、QCheckBox、QRadioButton、QMenu(可被選中的)、
QGroupBox(可被選中的)的指示器
選項
卡欄、
選項
卡部
件、
可停
靠窗
::pane
QTabWidget 的面板(邊框)
::right-corner
QTabWidget 的右角落,此控件可用於控件 QTabWidget 中右角落部件的位置
::left-corner
QTabWidget 的左角落,此控件可用於控件 QTabWidget 中左角落部件的位置
::tab-bar
QTabWidget 的選項卡欄,此子控件僅用於控制 QTabBar 在 QTabWidget 中的位
置,使用::tab 設置選項卡的樣式
::tab
QTabBar 或 QToolBox 的選項卡
::tear
QTabBar 的可分離指示器
::close-button
QTabBar 選項卡或 QDockWidget 上的關閉按鈕
::float-button
QDockWidget 的浮動按鈕
::title
QDockWidget 或 QGroupBox 的標題
菜單
相關
::scroller
QMenu 或 QTabBar 的滾動條
::separator
QMenu 或 QMainWindow 中的分隔符
::tearoff
QMenu 的可分離指示器
::item
QAbstractItemView、QMenuBar、QMenu、QStatusBar 中的一個項
::icon
QAbstractItemView 或 QMenu 的圖標
::menu-arrow
帶有菜單的 QToolButton 的箭頭
::menu-button
QToolButton 的菜單按鈕
::menu-indicator
QPushButton 的菜單指示器

實例:

    this->resize(400,300);
    QSpinBox* sb=new QSpinBox(this);
    sb->move(10,10);
    sb->resize(100,30);

    sb->setStyleSheet("QSpinBox::up-button{Subcontrol-Position:left top}"); //Subcontrol-Position   子控件位置屬性

 

偽狀態

部件含有一系列的狀態,樣式表的狀態使用“:”符號開頭。
比如QPushButton:hover{…} //表示鼠標懸停在按鈕上
偽狀態的規則:
①、用感嘆號可否定偽狀態,比如QPushButton:!hover{…} //表示鼠標未懸停在按鈕上
②、多個偽狀態連用可達到邏輯與(AND)的效果,比如QCheckBox:hover:checked{…} //表示鼠標懸停在按鈕上且被選中
③、多個偽狀態之間使用逗號分隔可表示邏輯或(OR)的效果,比如QCheckBox:hover, QCheckBox:checked{…} //表示鼠標懸停在按鈕上或被選中
④、偽狀態還可以子控件聯合使用,比如QComboBox::drop-down:hover{…}
樣式表的偽狀態
常見
狀態
:active
部件位於激活窗口中
:focus
該項具有輸入焦點
:edit-focus
該項具有編輯焦點,此狀態僅適用於 Qt Extended 應用程序
:default
該項是默認值
:disabled
該項已被禁用
:enabled
該項已啟用
:hover
鼠標懸停在該項上
:pressed
使用鼠標按下該項
:no-frame
該項沒有邊框,比如,無邊框的 QLineEdit 等
:flat 
該項是平的(flat),比如,一個平的 QPushButton
:checked
該項被選中
:unchecked
該項未被選中
:off
適用於處於“關閉(off)”狀態的項
:on
適用於處於“開啟(on)”狀態的項
:editable
QComboBox 是可編輯的
:read-only
該項為只讀,比如,只讀的 QLineEdit
:indeterminate
該項具有不確定狀態,比如,三態的 QCheckBox
:exclusive
該項是排他項目組的一部分
:non-exclusive
該項是非排他項目組的一部分
方位
相關
:bottom
該項位於底部
:top
該項位於頂部
:left
該項位於左側,比如,QTabBar 的選項卡位於左側
:right
該項位於右側,比如,QTabBar 的選項卡位於右側
:middle
該項位於中間,比如,不在 QTabBar 開頭或結尾的選項卡
:first
該項是第一個,比如,QTabBar 中的第一個選項卡
:last
該項是最后一個,比如,QTabBar 中的最后一個選項卡
:horizontal
該項具有水平方向
:vertical
該項具有垂直方向
其他
狀態
:maximized
該項是最大化的,比如,最大化的 QMdiSubWindow
:minimized
該項是最小化的,比如,最小化的 QMdiSubWindow
:floatable
該項是可浮動的
:movable
該項可移動,例如,可移動的 QDockWidget
:only-one
該項是唯一的,比如,只有一個選項卡的 QTabBar
:next-selected
下一項被選擇
:previous-selected
上一項被選擇
:selected
該項被選擇
:window
部件是一個窗口,即頂級部件
:closable
該項可被關閉,例如,可關閉的 QDockWidget
:closed
該項處於關閉狀態,比如 QTreeView 中的非展開項
:open
該項處於打開狀態,比如 QTreeView 中的展開項,或帶有打開菜單的
QComboBox 或 QPushButton
:has-children
該項具有孩子,比如,QTreeView 中具有子項的項
:has-siblings
該項具有兄弟姐妹(即同級的)
:adjoins-item
QTreeView 的::branch 與項相鄰時設置此狀態
:alternate
當 QAbstractItemView::alternatingRowColors()被設置為 true 時,為每個交替行設
置此狀態,以繪制 QAbstractItemView 的行
   

實例--偽狀態的使用

    this->resize(400,300);
    QPushButton* pb=new QPushButton("AAA",this);
    pb->move(10,10);
    this->setStyleSheet("QPushButton:hover{background-color:red}" "QPushButton:pressed{background-color:yellow}"); //注意:多個偽狀態時""連用,要寫在一個語句里,不能分開

 

樣式表的屬性

背景色、前景色、所選文本的顏色

屬性
類型
說明
1、background
Background
設置背景的簡寫方法,相當於指定 background-color、
background-image、background-repeat、background-position。
以下類支持此屬性
QAbstractItemView 子類,QAbstractSpinBox 子類,
QCheckBox,QComboBox,QDialog,QFrame,QGroupBox,
QLabel, QLineEdit, QRadioButton, QSplitter, QTextEdit,
QToolTip 和 QWidget
注意:若僅在 QPushButton 上設置背景色,除非把 border 屬
性設置為某個值,否則背景可能不會被顯示。
2、background-color
Brush
部件的背景色
3、background-image
Url
設置部件的背景圖像,背景圖像不會隨部件的大小自動縮
放,比如 QWidget{ background-image: url(F:/1i.png) }
【QWidget的窗口好像沒有效果】
4、background-repeat
Repeat
如何使用背景圖像填充背景區域 backgroung-origin,若未指
定此屬性,則在兩個方向重復背景圖像
5、background-position
Alignment
背景圖像在 background-origin 矩形內的位置,默認為 top left
6、background-attachment
Attachment 
確定 QAbstractScrollArea 中的 background-image 是相對於視
口滾動還是固定,默認值為 scroll,即,使用視口滾動
7、background-clip
Origin
 此屬性指定 background-color 和
background-image 的填充矩形,此屬性默認值為
border(即邊框矩形)
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,
QCheckBox,QComboBox,QDialog,QFrame,
QGroupBox,QLabel,QPushButton,QRadioButton,
QSplitter,QTextEdit,QToolTip,QWidget
8、background-origin
Origin
背景圖片的有效矩形,默認為 padding(即填充矩
形)
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,
QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,
QTextEdit,QToolTip,QWidget,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog)

 

 

9、color
Brush
渲染文本的顏色,所有遵守 QWidget::palette 的部件都支持此
屬性
10、
selection-background-color
Brush
所選文本或項的背景色,所有遵守 QWidget::palette 和顯示選
擇文本的部件都支持此屬性,默認為調色板的
QPalette::Highlight 角色的值
11、selection-color
Brush
所選文本或項的前景色,所有遵守 QWidget::palette 和顯示選
擇文本的部件都支持此屬性,默認為調色板的
QPalette::HighlightedText 角色的值

實例:

     this->resize(400,300);
    QLabel* label=new QLabel("標簽",this);
    label->move(10,10);
    label->resize(350,250);
    label->setStyleSheet( "QLabel{background: red url(./a.png);" //背景色為紅色,背景圖片為a.png "background-repeat: repeat-y;" //在 y 軸方向重復圖片 "background-position: right;}"); //背景圖片位於部件右側 //注意:設置多個屬性的語法

盒子模型及相關屬性

盒子模式

 

樣式表的邊框屬性

樣式表的邊框屬性主要描述的是邊框的邊界線,包括邊界線的顏色、樣式(虛線、實線等)、寬度、角落半徑和填充邊框的圖像
注意:由於邊框(border)、填充矩形(padding)、輪廓線(outline)的邊界線默認寬度為 0,且樣式為 none(即沒有線條),因此要使其邊界線可見,必須指定邊界線的寬度和樣式,否則邊界線不可見
①、邊框的簡寫方法
1)、border      類型:Border
設置邊框的簡寫方法,相當於指定 border-color,border-style,border-width
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QDialog,QFrame,
QGroupBox,QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QWidget
2)、border-top          類型:Border
設置部件頂部邊框的簡寫方法,相當於指定 border-top-color,border-top-style,border-top-width
3)、border-right         類型:Border
設置部件右邊框的簡寫方法,相當於指定 border-right-color,border-right-style,border-right-width
4)、border-bottom      類型:Border
設置部件底部邊框的簡寫方法,相當於指定 border-bottom-color,border-bottom-style,border-bottom-width
5)、border-left     類型:Border
設置部件左邊框的簡寫方法,相當於指定 border-left-color,border-left-style,border-left-width
②、邊框顏色
6)、border-color      類型:Box Colors
邊框邊界線的顏色,相當於指定 border-top-color,border-bottom-color,border-left-color,border-right-color,默認值為 color(即部件的前景色)  
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QWidget,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog)
7)、border-top-color      類型:Brush     //邊框頂部邊界線的顏色
8)、border-right-color    類型:Brush    //邊框右邊界線的顏色
9)、border-bottom-color    類型:Brush     //邊框底部邊界線的顏色
10)、border-left-color       類型:Brush      //邊框左邊界線的顏色
③、邊框半徑
11)、border-radius    類型:Radius
邊框角落的半徑,等效於指定 border-top-left-radius,border-top-right-radius,border-bottom-left-radius,border-bottom-right-radius,該屬性剪切元素的 background(背景),默認為 0。
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,QMenuBar(注意:沒有 QDialog 和 QWidget)
12)、border-top-left-radius          類型:Radius            //邊框左上角的半徑
13)、border-top-right-radius       類型:Radius            //邊框右上角的半徑
14)、border-bottom-right-radius    類型:Radius         //邊框右下角的半徑
15)、order-bottom-left-radius        類型:Radius         //邊框左下角的半徑
④、邊框樣式
16)、border-style        類型:Border Style
邊框邊界線的樣式(虛線、實線、點划線等),默認為 none
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog 和 QWidget)
 
邊框樣式種類:

solid 實線
dotted 點狀邊框
none無邊框
dashed 虛線
double 雙線
groove 定義3D凹槽邊框。其效果取決於border-color的值
ridge 定義3D壟狀邊框。其效果取決於 border-color的值
inset 定義3D inset邊框。其效果取決於 border-color的值
outset 定義3D outset邊框。其效果取決於 border-color的值

17)、border-top-style                類型:Border Style      //邊框頂部邊界線的樣式
18)、border-right-style              類型:Border Style     //邊框右側邊界線的樣式
19)、border-bottom-style          類型:Border Style     //邊框底部邊界線的樣式
20)、border-left-style                類型:Border Style     //邊框左側邊界線的樣式
⑤、邊框寬度
21)、border-width              類型: Border Lengths
邊框的寬度,等效於指定 border-top-width,border-bottom-width,border-left-width,border-right-width
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog 和 QWidget)
22)、border-top-width               類型:Length       //邊框頂部邊界線的寬度
23)、border-right-width             類型:Length       //邊框右側邊界線的寬度
24)、border-bottom-width         類型:Length       //邊框底部邊界線的寬度
25)、border-left-width               類型:Length       //邊框左側邊界線的寬度
⑥、邊框圖像
26)、border-image                類型:Border Image
填充邊框的圖像,該圖像被分割成 9 個部分,並在必要時適當地拉伸
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog 和 QWidget)

樣式表的邊距屬性

27)、margin   類型:Box Lengths
部件的邊距,等效於指定 margin-top,margin-right,margin-bottom,margin-left,默認為 0
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog 和 QWidget)
28)、margin-top                 類型:Length        //部件的頂部邊距
29)、margin-right               類型:Length        //部件的右側邊距
30)、margin-bottom           類型:Length        //部件的底部邊距
31)、margin-left                 類型:Length        //部件的左側邊距

樣式表的填充屬性

32)、padding          類型:Box Lengths
部件的填充矩形,等效於指定 padding-top,padding-right,padding-bottom,padding-left,默認為 0
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSplitter,QTextEdit,QToolTip,QLineEdit,QMenu,
QMenuBar(注意:沒有 QDialog 和 QWidget)
33)、padding-top                        類型:Length         //填充矩形頂部離邊框頂部的距離
34)、padding-right                      類型:Length        //填充矩形右側離邊框右側的距離
35)、padding-bottom                  類型:Length        //填充矩形底部離邊框底部的距離
36)、padding-left                        類型:Length        //填充矩形左側離邊框左側的距離

樣式表的輪廓線屬性

37)、outline                   //繪制在對象邊框上的輪廓--內容矩形邊框上

 

這條輪廓線  有焦點時顯示   無焦點時不顯示 

38)、outline-color          類型:Color       //輪廓線的顏色
39)、outline-offset          類型:Length   //輪廓與部件邊框的偏移量
40)、outline-style          //繪制輪廓的圖案(pattern),另見 border-style
41)、outline-radius        //輪廓的圓角
42)、outline-bottom-left-radius      類型:Radius       //輪廓左下角的半徑
43)、outline-bottom-right-radius    類型:Radius       //輪廓右下角的半徑
44)、outline-top-left-radius            類型:Radius        //輪廓左上角的半徑
45)、outline-top-right-radius          類型:Radius        //輪廓右上角的半徑

 

 

實例:

     this->resize(600,300);
    QPushButton *pb1=new QPushButton("BBB",this);
    pb1->move(433,33);
    QLabel* label=new QLabel("標簽",this);
    label->move(433,233);
    QPushButton *pb=new QPushButton("AAA",this);
    pb->move(33,33); pb->resize(333,222);
    this->setStyleSheet(
     "QPushButton{"
     "background: red url(./a.png);"
     "background-repeat: repeat-y;"
     "background-position: left;"

    "border: 11px solid rgb(0,0,250);"  //繪制一個11像素寬的紅色實線邊框線,注意值的順序
     "margin:22px;" //部件的邊距為22像素
     "padding:22px;" //部件填充距離為22像素
     "background-clip:margin;" //背景色填充整個邊距矩形
     "background-origin:margin;" //背景圖片的原點位於邊界矩形
     "outline:11 dashed rgb(250,250,0);}" //繪制一個 11 像素寬的黃色虛線輪廓線
     "QPushButton:pressed {" //當按鈕按下時的樣式
     "background-color: blue;" //背景色為藍色
     "background-clip:border;" //背景色填充邊界矩形
     "background-origin:content;}" //背景圖片的有效矩形為內容矩形
     );

工程下載:鏈接:https://pan.baidu.com/s/1E5G9-xTkRoonyJ5zlUVB_w   提取碼:6666    

邊框圖像(border-image)原理

 

1)、如上圖,邊框圖像被 4 條虛線划分為 3*3 的小格,從而把圖像分為 9 個區域
2)、當使用邊框圖像填充部件背景時,4 個角(即格子①、③、⑦、⑨)保持不變,其他 5個格子被拉伸或重復(即平鋪)
3)、邊框圖像的設計原則如下:
4 條虛線分別使用從上、右、下、左邊緣的距離設置,如圖中 top、right、bottom、left 所示
使用邊框圖像還必須明確的設置邊框的寬度(即 border-width 屬性),通常把邊框寬度設置為與 4 條虛線的值相一致,否則,4 個角的圖像將被適當的拉伸或壓縮以適應邊框的大小
4)、邊框圖像(border-image)與背景圖像(background-image)的顯著區別是,背景圖像不會隨窗口部件的大小而縮放
5)、若同時指定了邊框圖像和背景圖像,則邊框圖像會繪制在背景圖像之上

實例

     this->resize(400,300);
    QPushButton *pb=new QPushButton("AAA",this);
    pb->move(10,10); pb->resize(270,270);
    this->setStyleSheet(
     "QPushButton{"
    /*設置邊框圖像,其上、右、下、左的邊緣距離分別為 90 90 90 90,除 4 個角外,
     中間塊的處理方式:stretch  拉伸     round  平鋪      repeat 重復*/
     "border-image:url(./b.png) 90 90 90 90 repeat;"
     "background-color: blue;"
     "border-width:90;}" //必須設置邊框寬度
     );

工程下載:鏈接:https://pan.baidu.com/s/1HiEF75er3fO_6jMSmDo2Og   提取碼:6666    

與子部件位置、大小有關的屬性

1、subcontrol-origin           類型:Origin     //子控件的原點矩形,默認為 padding
2、subcontrol-position      類型:Alignment      子控件在 subcontrol-origin 屬性指定的矩形內的對齊方式,默認值取決於子控件
3、position                      類型:relative | absolute      使用 left、right、top、bottom 屬性的偏移是相對坐標還是絕對坐標。默認為 relative(相對的)
4、spacing      類型:Length
部件的內部間距(比如復選按鈕和文本之間的距離),默認值取決於當前樣式
以下類支持此屬性:QCheckBox,可選中的 QGroupBox,QRadioButton,QMenuBar
5、bottom      類型:Length
      left           類型:Length
     top           類型:Length
     right        類型:Length
     以 bootom 屬性為例(其余屬性類似),若 position 屬性是 relative(相對的,默認值),則將子控件向上移動一偏移量,若 position 是 absolute(絕對的),則 bottom 屬性是指與子控件的下邊緣的距離,該距離與subcontrol-origin 屬性有關。此屬性默認值為 0。
6、height      類型:Length
     width       類型:Length
     子控件的高度/寬度,默認值取決於當前樣式,注意:除非另有規定,否則在部件上設置此屬性無效,若想要部件有一個固定的高度,應把 min-height 和 max-height 設置為相同的值,寬度類似
7、max-height     類型:Length
     max-width       類型:Length
部件或子控件的最大高度/寬度,以上值相對於盒子模型的內容矩形
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSizeGrip,QSpinBox,QSplitter,QStatusBar,QTextEdit,
QToolTip,QLineEdit,QMenu,QMenuBar,(注意:沒有 QDialog 和 QWidget)
8、min-height            類型:Length
     min-width             類型:Length
部件或子控件的最小高度/寬度,默認值依賴於部件的內容和樣式,該值相對於盒子模型的內容矩形
以下類支持此屬性:
QAbstractItemView 子類,QAbstractSpinBox 子類,QCheckBox,QComboBox,QFrame,QGroupBox,
QLabel,QPushButton,QRadioButton,QSizeGrip,QSpinBox,QSplitter,QStatusBar,QTextEdit,
QToolTip,QLineEdit,QMenu,QMenuBar,(注意:沒有 QDialog 和 QWidget)

實例

     this->resize(400,300);
    QSpinBox *pb=new QSpinBox(this); pb->move(33,33);
     pb->resize(300,200); //為使效果比較明顯,把按鈕設置得相對大一點
     this->setStyleSheet(
      "QSpinBox::down-button{" //設置微調按鈕的向下按鈕
      "subcontrol-origin:content;" //子控件的原點矩形
      "subcontrol-position:right bottom;" //子控件相對於原點矩形的對齊方式
      "height:22px;" "width:22px;" //設置子控件(即向下按鈕)的大小(即寬度和高度)
     //設置向下按鈕的位置使用絕對坐標指定,若要使用相對坐標,只需把 absolute 修改為 relative 即可
      "position:absolute;"  //絕對坐標
      "bottom:22px;" "right:11px;"
      "margin:11px;" //設置向下按鈕的邊距
      "background-color:red;" //使用紅色填充子控件(向下按鈕)背景
      "background-clip:margin" //填充背景的區域為邊距矩形(margin)范圍
      "}"
       );

 

 

字體、文本、圖標、圖像、不透明度屬性

屬性
類型
說明
1、icon-size
Length
部件中圖標的寬度和高度,可設置以下部件的圖標大小:
QCheckBox,QListView,QPushButton,QRadioButton,QTabBar,
QToolBar,QToolBox,QTreeView
2、text-align
Alignment
部件中文本的對齊方式,默認值取決於樣式
3、text-decoration
none沒有線
underline 下划線
overline上划線
line-through刪除線
附加的文本的效果
4、font
Font
設置文本字體的簡寫方法,相當於指定 font-family,font-size,font-style,
font-weight,所有遵守 QWidget::font 屬性的部件都支持此屬性。默認
為 QWidget::font 屬性
5、font-family
String
字體系列(字體族)
6、font-size
Font Size
字體的大小,僅支持 pt 和 px(像素)
7、font-style
Font Style
字體的樣式(比如是否傾斜)
8、font-weight
Font Weight
字體的重量(即字體的粗細)
9、image
Url
繪制在子控件內容矩形(content)中的圖像
繪制的圖像使用與 QIcon 相同的算法,即圖像不會放大,但在必
要時會縮小
在子控件上設置該屬性,會隱式設置子控件的寬度和高度(除非
使用 svg 圖像)
Qt4.3 之后可使用 image-position 來設置圖像在矩形內的對齊方
此屬性僅用於子控件,不支持其他元素
若指定了 svg,則圖像將被縮放到內容矩形的大小,注意:svg需使用 svg 插件
 
若還同時設置了背景圖像(background-image)和邊框圖像
(border-image),則 image 繪制在 border-image 之上,border-image
繪制在 background-image 之上
10、image-position
Alignment 
圖像的位置(對齊方式)
11、opacity
Number
部件的不透明度,其值為 0(透明)到 255(不透明),目前僅支持工具提
示。默認值為當前樣式 QStyle::SH_ToolTipLabel_Opacity 指定的值

實例

     this->resize(400,300);
    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->setIcon(QIcon("./aa.jpg")); //添加一個圖標
    pb1->resize(333,133); //為使效果比較明顯,把按鈕設置得相對大一點
    this->setStyleSheet(
     "QPushButton{"
     "text-align:top right;" //文本對齊方式
     "icon-size:30px;" //注意:此處必須帶上單位(px 表示像素)

     "text-decoration:underline;" //為文本添加下划線
    /*設置字體,以下屬性需按照字體度量、樣式、大小、字體族的順序排列,且字體大小必須帶上單位,
    否則屬性將不起作用。*/
     "font:900 italic 55px Times New Roman;}"
     );

 

 

 工程下載:鏈接:https://pan.baidu.com/s/1v3o8spefdNmTAojTp6BSXA    提取碼:6666   

其他屬性

1、button-layout     類型:Number
QDialogButtonBox 或 QMessageBox 中按鈕的布局,可取值為 0,1,2,3,5,其意義如下:
0:QDialogButtonBox::WinLayout,
1:QDialogButtonBox::MacLqyout,
2:QDialogButtonBox::KdeLayout,
3:QDialogButtonBox::GnomeLayout),
5:QDialogButtonBox::AndroidLayout,
默認值為 QStyle::SH_DialogButtonLayout 的值
2、dialogbuttonbox-buttons-have-icons       類型:Boolean //QDialogButtonBox 中的按鈕是否顯示圖標
3、lineedit-password-character          類型:Number
QLineEdit 的密碼字符(使用 unicode 數字),比如:*{lineedit-password-character:9679}
默認為 QStyle::SH_LineEdit_PasswordCharacter 的值
4、lineedit-password-mask-delay      類型:Number     //qt5.4
QLineEdit 在顯示密碼字符之前的延遲時間(毫秒),默認為 QStyle::SH_LineEdit_PasswordMaskDelay 的值
5、messagebox-text-interaction-flags       類型:Number
消息框中與文本的交互行為,可取值基於 Qt::TextInteractionFlags 標志,比如
QMessageBox{messagebox-text-interaction-flags:5}; //即 Qt::LinksAccessibleByMouse(值為 4)與
Qt::TextSelectableByMouse(值為 1)的按位或。
默認值為 QStyle::SH_MessageBox_TextInteractionFlags 的值
6、titlebar-show-tooltips-on-buttons        類型:bool       //是否在工具欄按鈕上顯示工具提示
7、widget-animation-duration      類型:Number       //qt5.10
動畫的持續時間(毫秒),0 意味着禁用動畫,默認值為 QStyle::SH_Widget_Animation_Duration 的值
8、alternate-background-color       類型:Brush
QAbstractItemView 的交替背景色,若未設置此屬性則使用 QPalette::AlternateBase 角色的顏色
9、paint-alternating-row-colors-for-empty-area        類型:bool
QTreeView 是否為空區域(即沒有項的區域)繪制交替行顏色
10、show-decoration-selected       類型:Boolean
在 QListView 中選擇是覆蓋整行還是僅覆蓋文本,默認為 QStyle::SH_ItemView_ShowDecorationSelected的值
11、gridline-color    類型:Color
QTableView 中網格線的顏色,默認為 QStyle::SH_Table_GridLineColor 的值

屬性類型

1、各符號的含義
|   分隔符,比如 0 | 1,表示 0 或者 1
*   表示 0 或更多
+  表示 1 或更多
?   選擇0個或1個,比如(on | off)?,表示可取 on 或 off 之一,或一個都不取
{0,4}    表示 0 到 4,比如 Length{0 , 4},表示 0 到 4 個 Length 的值
 
示例:
①、{top | bottom | left | right | center}* //表示可取大括號中任意值的組合比如 top left 表示左上
②、(Font Style | Font Weight){0, 2} Font Size String
以上語法表示,其值的格式必須按照如下順序指定(若順序不正確,則取值無效):
“Font Style 或 Font Weight 的值之一或無,字體大小,一個字符串”,
假設 Font Style 屬性類型可取值為 italic,Font Weight 屬性類型可取值為一整數,Font Size 屬性類型可
取值為一像素值,String 為一字符串,則以下值是有效的取值
italic 55px "Calibri" //斜體,字的大小為 55 像素,字體族為 Calibri
900 55px "Calibri" //字體粗細為 900,大小為 55 像素,字體族為 Calibri
900 italic 55px "Calibri" 或 italic 900 55px "Calibri" //Font Style 和 Font Weight 的位置無關緊要
以下為無效的取值 900 55px italic "Calibri" //Font Size 和 Font Style 的順序不對
55px italic "Calibri" //原因同上
2、Alignment       值:{top | bottom | left | right | center}*   對齊方式
比如 QPushButton{background-position:top right} //右上角對齊
3、Url       值:url(filiename)     其中的 filename 是本地磁盤或 Qt 資源系統的文件的名稱
比如    QPushButton{background-image:url(F:/1i.png)} //讀取文件 F:/1i.png 作為背景圖像
4、Attachment     值:{scroll | fixed}*
滾動或固定,屬性 background-attachment 使用該類型,以用於 QAbstractScrollArea
5、Background      值:{Brush | Url | Repeat | Alignment}* //參見各屬性類型的取值
6、Boolean    值:0 | 1 //布爾值,取 0 或 1
7、Border     值:{Border Style | Length | Brush}* //參見各屬性類型的取值
8、Border Image     值:none | Url Number{4} (stretch | repeat) {0, 2}
該值用於指定邊框圖像(border-image),注意值的格式,比如
QPushButton{
 
border-image:url(F:/1x.png) 15 25 15 25 repeat;
border-width:55;} //指定邊框圖像還需設置邊框寬度
9、Border Style      值:dashed | dot-dash | dot-dot-dash | dotted | double | grovve | inset | outset | ridge | solid | none
該屬性類型用於指定邊界線的樣式,比如 dashed 表示虛線,dotted 表示點線等
10、Box Colors     值:Brush{1, 4}
1 到 4 個 Brush 值,分別指定盒子的 top、right、bottom、left 邊界線,若未指定 left,則將與 right 相同,
若未指定 bottom,則與 top 相同,若未指定正確的顏色,則與 top 的相同,下面為示例:
QLabel{border-color:yellow} //四條邊界線都為黃色
QLabel{border-color:yellow red} //top、bottom 為黃色,left 和 right 為紅色
QLabel{border-color:yellow red blue} //top 為黃色,right 和 left 為紅色,bottom 為藍色
QLabel{border-color:yellow red blue green} //top 為黃色,right 為紅色,bottom 為藍色,left 為綠色
11、Box Lengths    值:Length{1, 4}
1 到 4 個 Length 值,分別指定盒子的 top、right、bottom、left 邊界線,其原理與 Box Colos 相同。
12、Brush    值:Color | Gradient | PaletteRole
具體可參見各屬性類型的取值,注意:Brush 屬性類型還可指定漸變色(即 Gradient 屬性類型)
13、Color    值:rgb(r, g, b) | rgba(r, g, b, a) | hsv(h, s, v) | hsva(h, s, v, a) | #rrggbb | Color Name
指定顏色,從其值可看到,顏色可使用 6 種方式指定,其中 rgb()和 rgba()可取 0~255 之間的值,或一個百分比值,hsv()或 hsva 中的 s 和 v 必須是 0~255 之間的值,h 的值是 0~359 之間的值,
比如QLabel{border-color: rgba(111,11,11, 70%);
14、Font     值:(Font Style | Font Weight){0, 2} Font Size String
字體屬性,對該屬性取值的講解
15、Font Size
值:Length //字體的大小
16、Font Style
值:normal | italic | oblique
//字體的樣式
17、Font Weight
值:normal | bold | 100 | 200 | … | 900
//字體的重量(即粗細)
18、Length
值:Number(px | pt | em |ex )?
數字后跟一個測量單位(比如像素),在 Qt 中,必須指定測量單位,為了早期的 Qt 版本兼容,大多數情況
下,若未指定測量單位,則被視為像素,支持的單位如下:
px:像素
pt:點(即 1/72 英寸)
em:字體的 em 寬度,即字母 M 的寬度
ex:字體的 ex 寬度,即字母 X 的寬度
19、Number
值:一個 10 進制整數和實數,比如 18, 23.46 等
20、Origin
值:margin | border | padding | content
指定盒子模型中的 4 個矩形,詳見盒子模型原理(前文)
21、PaletteRole
值:alternate-base | base | bright-text | button | button-text | dark | highlight | highlighted-text | light | link |
link-visited | mid | midlight | shadow | text | window | window-text
該屬性類型的取值對應於 QPalette::ColorRole 枚舉。
22、Radius
值:Length{1,2}
1 到 2 個 Length,若只指定了一個 Length,則表示角的 1/4 圓的半徑,若指定兩個長度,則第一個長度
是 1/4 橢圓的水平半徑,第二個長度是垂直半徑
23、Repeat
值:repeat-x | repeat-y | repeat | no-repeat
表示重復性質(可實現圖像的平鋪),其中 repeat-x 表示水平方向重復,repeat-y 表示垂直方向重復,repeat
表示水平和垂直方向重復,no-repeat 表示沒有重復。
24、Icon    值:(Url (disabled | active | normal | selected)?(on | off) ?) *       指定圖標(圖標屬性見下表),示例
QMessageBox {
dialogbuttonbox-buttons-have-icons: true; //顯示圖標
dialog-ok-icon: url(ok.svg); //ok 按鈕的圖標
dialog-cancel-icon: url(cancel.png), //cancel 按鈕的圖標
url(grayed_cancel.png) disabled; } //禁用時 cancel 的圖標

 

漸變色 

25、Gradient     值:qlineargradient | qradialgradient | qconicalgradient     指定 漸變填充
其中 qlinearGradient 表示線性漸變,qradialgradient 表示徑向漸變,qconicalgradient 表示圓錐漸變

實例: 線性漸變

 

 

 

    this->resize(400,300);
    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->resize(333,133); //為使效果比較明顯,把按鈕設置得相對大一點
    this->setStyleSheet(
     "QPushButton {"
                "background: qlineargradient(" //設置線性漸變背景
                "x1:0, y1:0, x2:1, y2:1,"   //漸變范圍從左上角(0,0),到右下角(1,1),也決定了漸變方向
                "stop:0 red, stop: 0.5 yellow, stop:1 blue)" //起點顏色為紅色,中點位置顏色為黃色,終點顏色為藍色
                "}"
     );

 

 

 

實例:圓錐漸變(角度漸變)

 

 

    this->resize(400,300);
    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->resize(333,133); //為使效果比較明顯,把按鈕設置得相對大一點
    this->setStyleSheet(
     "QPushButton {"
                "background: qconicalgradient(" //圓錐漸變
                "cx:0.5, cy:0.5,"   // 圓心位置
                "angle:30,"  //起始角度
                "stop:0 red, stop:0.5 yellow,stop:1 blue"  //指定漸變顏色
                ")"
                "}"
     );

 

 

實例:徑向漸變(輻射漸變)

以圓心為中心顯示漸變。(cx, cy)是中點,半徑(radius)是以中點為圓心的圓的半徑,(fx, fy)是漸變的起點

    this->resize(400,300);
    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    pb1->resize(333,133); //為使效果比較明顯,把按鈕設置得相對大一點
    this->setStyleSheet(
     "QPushButton {"
                "background: qradialgradient(" //徑向漸變
                "cx:0, cy:0,"   // 圓心位置
                "radius: 1,"  //半徑
                "fx:0.5, fy:0.5,"  //漸變的起點
                " stop:0 red,stop:0.5 yellow, stop:1 green" //指定漸變顏色
                ")"
                "}"
     );

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM