QT開發(六十四)——QT樣式表(二)

QT開發(六十四)——QT樣式表

    本文主要翻譯自QT官方文檔Qt Style Sheets
框架

5、QT樣式表參考

QT樣式表支持多種的屬性、狀態和子控件,使得定製組件的外觀成爲可能。ide

1、組件

如下組件均可以使用樣式表定製樣式。函數

組件工具

如何設置樣式佈局

QAbstractScrollAreathis

支持盒子模型。url

QAbstractScrollArea的全部繼承類,包括QTextEditQAbstractItemView(全部的項視圖類),都支持可滾動的背景,使用background-p_w_upload來設置是否滾動。將background-p_w_upload設置成fixed的話,就會使得background-p_w_picpath不隨視口(viewport)而滾動。若是將background-p_w_upload設置成scroll,移動滾動條時,background-p_w_picpath會滾動。spa

參考自定義QAbstractScrollArea的示例。翻譯

QCheckBox排序

支持盒子模型。選中狀態的指示器可以使用::indicator子控件(subcontrol)來進行樣式設置。默認狀況下,指示器放在組件的內容矩形的左上角。

spacing屬性指定選中狀態指示器與文字之間的空隙。

參考自定義QCheckBox示例。

QColumnView

可以使用p_w_picpath屬性來對收縮狀態進行樣式設置。箭頭指示器(arrow indicators)可以使用::left-arrow::right-arrow子控件來進行樣式設置。

QComboBox

組合框的框架(frame)可以使用盒子模型來進行樣式設置。下拉按鈕可以使用::drop-down子控件來進行樣式設置。默認狀況下,下拉按鈕放置在組件的襯底區域的右上角。下拉按鈕中的箭頭標誌可以使用::down-arrow子控件來進行樣式設置。默認狀況下,箭頭是放置在下拉按鈕子控件的內容區域的中心。

參考自定義QComboBox示例。

QDialog

只支持background、background-clip和background-origin屬性。

警告:確保在自定義的組件中定義了Q_OBJECT宏。

QDialogButtonBox

按鈕的佈局方式可以使用button-layout屬性來改變。

QDockWidget

在停靠狀態(docked),支持對標題欄和標題欄的按鈕進行樣式設置。

停靠組件的邊框(border)可以使用border屬性來進行樣式設置。::title子控件可用來對標題欄進行樣式設置。關閉按鈕和懸浮按鈕相對於::title子控件的位置可分別使用::close-button和::float-button來進行設置。若是標題欄是豎直的,會設置:vertical僞類。

此外,根據QDockWidget::DockWidgetFeature值,設置:closable、:floatable和:movable僞狀態。

注意:使用QMainWindow::separator對改變大小的句柄進行樣式設置。

警告:在QDockWidget不處於停靠狀態時,樣式表無效。

參考自定義QDockWidget示例。

QFrame

支持盒子模型。

從QT4.3 開始,對QLabel設置樣式表,會自動將QFrame::frameStyle屬性設置成QFrame::StyledPanel。

參考自定義QFrame示例。

QGroupBox

支持盒子模型。標題可以使用::title子控件來進行樣式設置。默認狀況下,標題根據QGroupBox::textAlignment 屬性進行定位。

對於選中的QGroupBox,標題包含選中狀態指示器。指示器可以使用::indicator子控件來進行樣式設置。spacing屬性用來設置文字與指示器之間的間隔。

參考自定義QGroupBox示例。

QHeaderView

支持盒子模型。表頭視圖的各個區域使用::section子控件來進行樣式設置的。section子控件支持:middle、:first、:last、 spacer.gifonly-one、

:next-selected、:previous-selected、:selected和:checked僞狀態。

排序指示器使用::up-arrow和::down-arrow子控件來進行樣式設置。

參考自定義QHeaderView示例。

QLabel

支持盒子模型。不支持:hover僞狀態。

從QT4.3 開始,對QLabel設置樣式表會自動將QFrame::frameStyle 屬性設置成QFrame::StyledPanel。

參考自定義QFrame示例(QLabel繼承自QFrame)。

QLineEdit

支持盒子模型。

選中的項的顏色和背景分別是使用selection-color和selection-background-color來進行樣式設置。

密碼字符可以使用lineedit-password-character屬性來進行樣式設置。

密碼掩碼延遲可以使用lineedit-password-mask-delay屬性修改。

參考自定義QLineEdit示例。

QListView/

QListWidget

支持盒子模型。若是交替改變行顏色功能打開,交替的顏色使用alternate-background-color屬性來進行樣式設置。

選中的項的顏色和背景分別是使用selection-color和selection-background-color來進行樣式設置。

選擇行爲由show-decoration-selected屬性來進行控制。

使用::item子控件來對QListView中的項進行更精細控制。

參考QAbsractScrollArea以瞭解對可滾動的背景的樣式設置。

參考自定義QListView示例。

QMainWindow

支持對分隔符進行樣式設置。

在QMainWindow中使用QDockWidget時產生的分隔符使用::separator子控件來進行樣式設置。

參考自定義QMainWindow示例。

QMenu

支持盒子模型。

單個的項使用::item子控件來進行樣式設置。除一般的僞狀態外,item子控件還支持:selected、:default、:exclusive和non-exclusive僞狀態。

複選選的菜單項指示器是經過::indicator子控件來進行樣式設置。

分隔符是使用::separator子控件進行樣式設置。

對於有子菜單的項,箭頭標記是使用right-arrow和left-arrow進行樣式設置。

滾動器使用::scroller進行樣式設置。

分離菜單使用::tearoff來進行樣式設置。

參考自定義QMenu示例。

QMenuBar

支持盒子模型。spacing屬性指定菜單項之間的空隙大小。

單個的項使用::item子控件進行樣式設置。

警告:在Qt/Mac平臺上,菜單欄一般嵌入到系統的全局菜單條中。在這種狀況下,樣式單無效。

參考自定義QMenuBar示例。

QMessageBox

messagebox-text-interaction-flags屬性用來選擇消息框中文字的交互模式。

QProgressBar

支持盒子模型。進度條的進度塊使用::chunk子控件來進行樣式設置。進度塊顯示在組件的內容區域中。

若是進度條顯示文字,使用text-align屬性來設置文字的位置。

不肯定的進度條使用:indeterminate僞狀態設置。

參考自定義QProgressBar示例。

QPushButton

支持盒子模型。支持:default、:flat、:checked僞狀態。

對於帶菜單的QPushButton,其菜單指示器是使用::menu-indicator子控件來進行樣式設置的。複選的按鈕的外觀可以使用:pen和:closed僞狀態進行樣式設置。

警告:若是隻爲QPushButton設置background-color,背景可能不會顯示出來,除非將邊框屬性設置成某個值。這是由於,在默認狀況下,QPushButton會繪製一個徹底覆蓋了背景色的本地邊框。例如,

QPushButton { background-color: red; border: none; }

參考自定義QPushButton示例。

QRadioButton

支持盒子模型。選中指示器使用::indicator子控件進行樣式設置。默認狀況下,指示器放置在組件內容區域的左上角。

spacing屬性指定選中指示器與文字之間的空隙。

參考自定義QRadioButton示例。

QScrollBar

支持盒子模型。組件中的內容區域就是滑塊滑動的槽。QScrollBar的廣度是使用width或height屬性設置的。要肯定方向,使用:horizontal和:vertical僞狀態。

滑塊使用::handle子控件進行樣式設置。設置min-width或min-height按照方向來對滑塊提供尺寸的限制。

::add-line子控件用來對增長一行的按鈕進行樣式設置。默認狀況下,add-line子控件放置在組件邊框區域的右下角。默認狀況下,箭頭放置在::add-line子控件內容區域的中心。

::sub-line子控件用來對減小一行的按鈕進行樣式設置。默認狀況下,sub-line子控件被放置在組件邊框區域的左上角。默認狀況下,箭頭放置在sub-line子控件內容區域的中心。

::sub-page子控件用來對減一頁做用的滑塊區域進行樣式設置。::add-page子控件用來對起到加一頁做用的滑塊區域進行樣式設置。

參考自定義QScrollBar示例。

QSizeGrip

支持width、height和p_w_picpath屬性。

參考自定義QSizeGrip示例。

QSlider

支持盒子模型。對於水平滑動器,必須提供min-width和height屬性。對於豎直滑動器,必須提供min-height和width屬性。

滑動器的滑槽使用::groove進行樣式設置。默認狀況下,滑槽被放置在組件的內容區域中。滑動器的滑塊使用::handle子控件進行樣式設置。子控件在滑槽的內容區域中移動。

參考自定義QSlider示例。

QSpinBox

QDateEdit

QDateTimeEdit

QDoubleSpinBox

QTimeEdit

旋轉框的框架使用盒子模型來進行樣式設置。

向上按鈕和箭頭可以使用::up-button和::up-arrow子控件來進行樣式設置。默認狀況下,向上按鈕被放置在組件填充區域的右上角。若是沒有顯式設置尺寸,會佔據參考區域的一半高度。向上箭頭被放置在向上按鈕的內容區域的中心。

向下按鈕和箭頭使用::down-button和::down-arrow子控件進行樣式設置。默認狀況下,向下按鈕被放置在組件填充區域的右下角。若是沒有顯式設置尺寸,會佔據參考區域的一半高度。向下箭頭被放置在向下按鈕的內容區域的中心。

參考自定義QSpinBox示例。

QSplitter

支持盒子模型。分割器的句柄使用::handle子控件進行樣式設置。

參考自定義QSplitter示例。

QStatusBar

只支持background屬性。單個項的框架使用::item子控件進行樣式設置。

參考自定義QStatusBar示例。

QTabBar

單個標籤使用::tab子控件進行樣式設置。關閉按鈕使用::close-button子控件進行樣式設置。標籤支持 only-one、:first、:last、:middle、:previous–selected、:next-selected、:selected僞狀態。

標籤的方向決定是否有:top、:left、:right、:bottom僞狀態。

對於選中狀態的重疊標籤經過使用負數的邊距或絕對位置模式來建立。

QTabBar的分離指示器使用::tear子控件進行樣式設置。

QTabBar用兩個QToolButtons做爲滾動器,使用QTabBar QToolButton選擇器進行樣式設置。使用::scroller子控件指定滾動按鈕的寬度。

QTabBar中標籤的對齊方式使用alignment屬性進行設置。

警告:要改變QTabWidget中的QTabBar的位置,使用tab-bar子控件。

參考自定義QTabBar示例。

QTabWidget

標籤組件的框架使用::pane子控件進行樣式設置。左邊角和右邊角分別使用::left-corner和::right-corner進行樣式設置。標籤條的位置使用::tab-bar子控件控制。

默認狀況下,QTabWidget的子控件的位置按照QWindowsStyle風格來肯定。要將QTabBar放置在中央的位置,設置tab-bar子控件的subcontrol-position屬性。

標籤組方向決定是否有:top、:left、:right、:bottom僞狀態。

參考自定義QTabWidget示例。

QTableView

支持盒子模型。若是交替改變行顏色功能開啓,交替的顏色使用alternate-background-color屬性進行樣式設置。

選中的項的顏色和背景分別是使用selection-color和selection-background-color進行樣式設置。

QTableView中的邊角組件由QAbstractButton實現,使用QTableViewQTableCornerButton::section選擇器進行樣式設置。

警告:若是隻在QTableCornerButton上設置背景色,背景可能不會顯示出來,除非將邊框屬性設置成某個值。這是由於,默認狀況下,QTableCornerButton會繪製一個徹底覆蓋背景色的本地邊框。

網格的顏色使用gridline-color屬性進行設置。

參考QAbsractScrollArea以瞭解如何設置可滾動的背景。

參考自定義QTableView示例。

QTextEdit

支持盒子模型。

選中文字的顏色和背景分別使用selection-color和selection-background-color進行樣式設置。

參考QAbsractScrollArea以瞭解如何設置可滾動的背景。

QToolBar

支持盒子模型。

工具欄所在的區域(停靠方向)決定是否會有:top、:left、:right、:bottom僞狀態。

:first、:last、:middle、:only-one僞狀態指示工具欄的位置是一個線性組(參考QStyleOptionToolBar::positionWithinLine)

QToolBar的分隔符使用::separator子控件進行樣式設置。

用來移動工具欄的句柄使用::handle子控件進行樣式設置。

參考自定義QToolBar示例。

QToolButton

支持盒子模型。

若是QToolButton有菜單,::menu-indicator子控件用來對菜單指示器進行樣式設置。默認狀況下,菜單指示器放置在組件填充區域的右下角。

若是QToolButton是QToolButton::MenuButtonPopup模式,::menu-button子控件用來繪製菜單按鈕。::menu-arrow子控件用來在菜單按鈕裏面繪製菜單箭頭。默認狀況下,菜單按鈕子控件位於內容區域的中心。

當QToolButton顯示箭頭時,會使用::up-arrow、::down-arrow、::left-arrow和::right-arrow子控件。

警告:若是隻在QToolButton 設置背景色,背景可能不會顯示出來,除非將邊框屬性設置成某個值。這是由於,默認狀況下,QToolButton會繪製一個徹底覆蓋背景色的本地邊框。例如,

QToolButton { background-color: red; border: none; }

參考自定義QToolButton示例。

QToolBox

支持盒子模型。

單個標籤使用::tab子控件進行樣式設置。標籤支持 :only-one、:first、:last、:middle、:previous-selected、:next-selected、:selected僞狀態。

QToolTip

支持盒子模型。opacity屬性控制工具提示的透明度。

參考自定義QFrame示例(QToolTip是QFrame)。

QTreeView

QTreeWidget

QTableWidget

支持盒子模型。若是交替改變行顏色功能開啓,交替的顏色使用alternate-background-color屬性進行樣式設置。

選中項的顏色和背景分別是使用selection-color和selection-background-color進行樣式設置。

選擇行爲由show-decoration-selected屬性進行控制。

樹型視圖的分支使用::branch子控件進行樣式設置。::branch子控件支持:open、:closed、:has-sibling和:has-children僞狀態。

使用::item子控件對QTreeView中的項進行更精細控制。

參考QAbsractScrollArea以瞭解如何設置可滾動的背景。

參考自定義QTreeView示例以瞭解如何對分支進行樣式設置。

QWidget

只支持background、background-clip和background-origin屬性。

若是從QWidget派生子類,須要爲自定義組件提供繪製事件處理函數(paintEvent):

void CustomWidget::paintEvent(QPaintEvent *)

{

QStyleOption opt;

opt.init(this);

QPainter p(this);

style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

}

若是沒有設置樣式單,以上的代碼不起任何做用。

警告:確保在自定義組件中定義了Q_OBJECT宏。

相關文章
相關標籤/搜索