QT开发(六十四)——QT样式表
本文主要翻译自QT官方文档Qt Style Sheets 。
五、QT样式表参考
QT样式表支持多种的属性、状态和子控件,使得定制组件的外观成为可能。
1、组件
以下组件都可以使用样式表定制样式。
组件 |
如何设置样式 |
QAbstractScrollArea |
支持盒子模型。 QAbstractScrollArea的所有继承类,包括QTextEdit和QAbstractItemView(所有的项视图类),都支持可滚动的背景,使用background-p_w_upload来设置是否滚动。将background-p_w_upload设置成fixed的话,就会使得background-p_w_picpath不随视口(viewport)而滚动。如果将background-p_w_upload设置成scroll,移动滚动条时,background-p_w_picpath会滚动。 参考自定义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、 only-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宏。 |