學習樣式表的目的:可以設計出好看的控件。(比如可以給一些按鈕設計成好看的圖片)
QT 樣式表的思想很大程度上是來自於HTML的層疊式樣式表(CSS),通過調用QWidget->setStyleSheet()或者QApplication->setStyleSheet(),你可以為一個獨立的子部件、整個窗口,甚至是整個應用程序指定一個樣式表。
樣式表的語法基礎:
QT樣式表與CSS的語法規則幾乎完全相同。
一個樣式表由一系列的樣式規則構成,每個樣式規則都有着下面的形式;
selector { attribute: value }
選擇器:(selector )部分通常是一個類名(例如QComboBox),當然也還有其他的語法形式。
屬性(attribute)部分是一個樣式表屬性的名字,值(value )部分是賦給該屬性的值。
為了使用上的方便,我們還可以使用一種簡化形式:
selector1, selector2, ..., selectorM { attribute1: value1; attribute2: value2; attribute3: value3; ....... attributeN: valueN; }
這種簡化方式可以同時為與M個選擇器相匹配的部件設置N種屬性。例如:
QChecked,QComboBox, QSpinBox{ color :red; background-color :white; font :bold; }
示列代碼如下:
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //功能:改變控件的背景色 this->setStyleSheet("QLabel{color:rgb(0,255,255);" "background-color:red;" "}"); /* 功能:將控件背景換為圖片 * "background-image:url(://res/1.jpg);"不可以伸縮, * * "border-image:url(://res/1.jpg);" 可以伸縮,更加的實用 * * "border-image:url(://res/1.jpg) 4 4 4 4 stretch stretch;"可以實現對圖片的裁剪 */ ui->label_2->setStyleSheet("QLabel{color:rgb(0,255,255);" "background-color:blue;" // "background-image:url(://res/1.jpg);" // "border-image:url(://res/1.jpg);" "border-image:url(://res/1.jpg) 4 4 4 4 stretch stretch;" "}"); //處理 偽狀態 /* 功能:當鼠標進入控件的區域內是改變背景圖 * * 部件的外觀可以按照用戶界面元素狀態的不同來分別定義,這在樣式表中被稱為“偽狀態”。 * 例如:如果我們想在一個 push button在被按下的時候具有sunken的外觀,我們可以指定一個叫做:pressed的偽狀態。 * */ ui->pushButton->setStyleSheet("QPushButton{" "border: 2px outset green;" "border-image:url(://res/1.jpg);" "}" "QPushButton:hover{" "border-image:url(://res/2.png);" "}" ); } Widget::~Widget() { delete ui; }
類似"QPushButton:hover{" "border-image:url(://res/2.png);" "}"中的hover偽狀態列表還有如下:
偽狀態 描述
:checked button部件被選中
:disabled 部件被選中
:enable 部件被啟用
:focus 部件獲得焦點
:hover 鼠標位於部件上
:indeterminate checked或radiobutton被部分選中
:off 部件可以切換,且處於off狀態
:on 部件可以切換,且處於on 狀態
:pressed 部件被鼠標按下
:unchecked button部件未被選中
下面兩張圖是運行顯示圖:
圖一鼠標沒有位於button部件上,圖二是鼠標位於button上
圖一:
圖二:
到此為止,QT的樣式表的學習就先告一段落了。運行的結果也是可以的。