一、描述

QStyle 类是一个抽象基类,它封装了 GUI 的外观。样式也可以作为插件使用。

Qt 的内置小部件使用 QStyle 来执行几乎所有的绘图,确保它们看起来与等效的原生小部件完全一样。下图显示了九种不同样式的 QComboBox

1.1、设置样式

可以使用 QApplication::setStyle() 函数设置整个应用程序的样式。

如果没有指定样式,Qt 会为用户的平台或桌面环境选择最合适的样式。

也可以使用 QWidget::setStyle() 函数在单个小部件上设置样式。

1.2、开发样式自适应的自定义小部件

如果希望自定义控件在所有平台上看起来都差不多,可以使用 QStyle 函数来执行小部件绘制的部分内容,例如 drawItemText()、drawItemPixmap()、drawPrimitive()、drawControl() 和 drawComplexControl( )。

大多数 QStyle 绘图函数采用四个参数:

  • 一个枚举值,指定要绘制的图形元素
  • 一个 QStyleOption 指定如何以及在哪里呈现该元素
  • 应该用于绘制元素的 QPainter
  • 执行绘图的 QWidget(可选)

例如,如果想在小部件上绘制一个焦点矩形(即获得焦点是围在四周的矩形),可以这样:

void Widget::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);

    QStyleOptionFocusRect option;
    option.initFrom(this);
    option.backgroundColor = palette().color(QPalette::Window);

    style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
}

QStyle 从 QStyleOption 获取渲染图形元素所需的所有信息。

通过正确设置 QPainter,可以使用 QStyle 在任何绘图设备上绘制,而不仅仅是小部件。

为方便起见,Qt 提供了 QStylePainter 类,它结合了 QStyle、QPainter 和 QWidget。

    QPainter painter(this);
    ...
    style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);

可以写作:

    QStylePainter painter(this);
    ...
    painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);

1.3、创建自定义样式

创建自定义样式有两种方法:

  • 静态方法:可以选择现有的 QStyle 类,对其进行子类化,然后重新实现虚函数以提供自定义行为,或者从头开始创建整个 QStyle 类。
  • 动态方法,可以在运行时修改系统样式的行为。

下面介绍静态方法。动态方法见 QProxyStyle

静态方法的第一步是选择 Qt 提供的样式之一,可以用作基础的最通用类是 QCommonStyle

根据要更改基本样式的哪些部分,必须重新实现用于绘制界面这些部分的函数。下面示例将修改 QProxyStyle 绘制的微调框箭头的外观。箭头是由 drawPrimitive() 函数绘制的原始元素,因此需要重新实现该函数:

class CustomStyle : public QProxyStyle
{
    Q_OBJECT

public:
    CustomStyle(const QWidget *widget);
    ~CustomStyle() {}

    void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                       QPainter *painter, const QWidget *widget) const override;
};

void CustomStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                                QPainter *painter, const QWidget *widget) const
{
    if (element == PE_IndicatorSpinUp || element == PE_IndicatorSpinDown) {
        QPolygon points(3);
        int x = option->rect.x();
        int y = option->rect.y();
        int w = option->rect.width() / 2;
        int h = option->rect.height() / 2;
        x += (option->rect.width() - w) / 2;
        y += (option->rect.height() - h) / 2;

        if (element == PE_IndicatorSpinUp) {
            points[0] = QPoint(x, y + h);
            points[1] = QPoint(x + w, y + h);
            points[2] = QPoint(x + w / 2, y);
        } else { // PE_SpinBoxDown
            points[0] = QPoint(x, y);
            points[1] = QPoint(x + w, y);
            points[2] = QPoint(x + w / 2, y + h);
        }

        if (option->state & State_Enabled) {
            painter->setPen(option->palette.mid().color());
            painter->setBrush(option->palette.buttonText());
        } else {
            painter->setPen(option->palette.buttonText().color());
            painter->setBrush(option->palette.mid());
        }
        painter->drawPolygon(points);
    } else {
    QProxyStyle::drawPrimitive(element, option, painter, widget);
    }
}

为了绘制向上和向下箭头,QSpinBox 使用 PE_IndicatorSpinUp PE_IndicatorSpinDown 原始元素。

注意:Qt 暂时不支持同时设置 QStyle 和 Qt样式表。

二、类型成员

1、enum QStyle::ComplexControl:此枚举描述了可用的复杂控件。

  • CC_SpinBox:微调框,类似于 QSpinBox。
  • CC_ComboBox:组合框,类似于 QComboBox。
  • CC_ScrollBar:滚动条,类似于 QScrollBar。
  • CC_Slider:滑块,类似于 QSlider。
  • CC_ToolButton:工具按钮,类似于 QToolButton。
  • CC_TitleBar:标题栏,类似于 QMdiSubWindow 中使用的标题栏。
  • CC_GroupBox:组框,类似于 QGroupBox。
  • CC_Dial:拨号,类似于 QDial。
  • CC_MdiControls:菜单栏中的最小化、关闭和正常按钮,用于最大化 MDI 子窗口。
  • CC_CustomBase:自定义复杂控件的基础值。自定义值必须大于此值。

2、enum QStyle::ContentsType:此枚举描述了可用的内容类型。用于计算各种小部件内容的大小。

  • CT_CheckBox:复选框,类似于 QCheckBox。
  • CT_ComboBox:组合框,类似于 QComboBox。
  • CT_HeaderSection:表头部分,如 QHeader。
  • CT_LineEdit:行编辑,如 QLineEdit。
  • CT_Menu:菜单,类似于 QMenu。
  • CT_MenuBar:菜单栏,类似于 QMenuBar。
  • CT_MenuBarItem:菜单栏项,类似于 QMenuBar 中的按钮。
  • CT_MenuItem:菜单项,如 QMenuItem。
  • CT_ProgressBar:进度条,类似于 QProgressBar。
  • CT_PushButton:按钮,如 QPushButton。
  • CT_RadioButton:单选按钮,如 QRadioButton。
  • CT_SizeGrip:尺寸握把,如 QSizeGrip。
  • CT_Slider:滑块,类似于 QSlider。
  • CT_ScrollBar:滚动条,类似于 QScrollBar。
  • CT_SpinBox:旋转框,类似于 QSpinBox。
  • CT_Splitter:分离器,如 QSplitter。
  • CT_TabBarTab:标签栏上的标签,如 QTabBar。
  • CT_TabWidget:标签小部件,类似于 QTabWidget。
  • CT_ToolButton:工具按钮,类似于 QToolButton。
  • CT_GroupBox:组框,类似于 QGroupBox。
  • CT_ItemViewItem:模型视图框架视图中的项目。
  • CT_MdiControls:最大化 MDI 子窗口的菜单栏中的最小化、正常和关闭按钮。
  • CT_CustomBase:自定义内容类型的基值。自定义值必须大于此值。

3、enum QStyle::ControlElement:此枚举代表一个控制元素。控制元素是小部件的一部分,它执行某些操作或向用户显示信息

  • CE_PushButton:一个 QPushButton,绘制 CE_PushButtonBevelCE_PushButtonLabel PE_FrameFocusRect
  • CE_PushButtonBevel:QPushButton 的斜角和默认指示器。
  • CE_PushButtonLabel:QPushButton 的标签(带有文本或像素图的图标)。
  • CE_DockWidgetTitle:Dock 窗口标题。
  • CE_Splitter:分隔器 QSplitter 的手柄。
  • CE_CheckBox:一个 QCheckBox,绘制一个 PE_IndicatorCheckBox、一个 CE_CheckBoxLabel 和一个 PE_FrameFocusRect
  • CE_CheckBoxLabel:QCheckBox 的标签(文本或像素图)。
  • CE_RadioButton:一个 QRadioButton,绘制一个 PE_IndicatorRadioButton、一个 CE_RadioButtonLabel 和一个 PE_FrameFocusRect
  • CE_RadioButtonLabel:QRadioButton 的标签(文本或像素图)。
  • CE_TabBarTab:QTabBar 中的选项卡和标签。
  • CE_TabBarTabShape:标签栏中的标签形状。
  • CE_TabBarTabLabel:标签内的 Label。
  • CE_ProgressBar:一个 QProgressBar,绘制 CE_ProgressBarGrooveCE_ProgressBarContents CE_ProgressBarLabel
  • CE_ProgressBarGroove:在 QProgressBar 中绘制进度指示器的凹槽。
  • CE_ProgressBarContents:QProgressBar 的进度指示器。
  • CE_ProgressBarLabel:QProgressBar 的文本标签。
  • CE_ToolButtonLabel:工具按钮的标签。
  • CE_MenuBarItem:QMenuBar 中的菜单项。
  • CE_MenuBarEmptyArea:QMenuBar 的空白区域。
  • CE_MenuItem:QMenu 中的一个菜单项。
  • CE_MenuScroller:当样式支持滚动时,QMenu 中的滚动区域。
  • CE_MenuTearoff:表示 QMenu 的脱离部分的菜单项。
  • CE_MenuEmptyArea:菜单中没有菜单项的区域。
  • CE_MenuHMargin:菜单左侧/右侧的水平额外空间。
  • CE_MenuVMargin:菜单顶部/底部的垂直额外空间。
  • CE_ToolBoxTab:QToolBox 中工具箱的选项卡和标签。
  • CE_SizeGrip:QSizeGrip。
  • CE_Header:视图的表头。
  • CE_HeaderSection:表头的标题部分。
  • CE_HeaderLabel:表头的标题的标签。
  • CE_ScrollBarAddLine:QScrollBar 线增加指示器。 (即向下滚动)。
  • CE_ScrollBarSubLine:QScrollBar 线减少指示器(即向上滚动)。
  • CE_ScrollBarAddPage:QScrollBar 页面增加指示器(即向下翻页)。
  • CE_ScrollBarSubPage:QScrollBar 页面减少指示器(即向上翻页)。
  • CE_ScrollBarSlider:QScrollBar 滑块。
  • CE_ScrollBarFirst:QScrollBar 第一行指示器。
  • CE_ScrollBarLast:QScrollBar 最后一行指示符。
  • CE_RubberBand:橡皮筋。
  • CE_FocusFrame:样式控制的焦点框。
  • CE_ItemViewItem:模型视图框架视图中的项目。
  • CE_ComboBoxLabel:不可编辑的 QComboBox 的标签。
  • CE_ToolBar:类似 QToolBar 的工具栏。
  • CE_ToolBoxTabShape:工具箱的标签形状。
  • CE_ToolBoxTabLabel:工具箱的标签标签。
  • CE_HeaderEmptyArea:标题视图区域中没有标题的部分。
  • CE_ShapedFrame:具有在 QStyleOptionFrame 中指定的形状的框架(QFrame)。
  • CE_CustomBase:自定义控件元素的基值,自定义值必须大于此值。

4、enum QStyle::PixelMetric:此枚举描述了各种可用的像素度量。像素度量是由单个像素值表示的与样式相关的大小。

  • PM_ButtonMargin:按钮标签和框架之间的空白量。
  • PM_DockWidgetTitleBarButtonMargin:停靠小部件(QDockWidget)的标题栏按钮标签和框架之间的空白量。
  • PM_ButtonDefaultIndicator:默认按钮指示器框架的宽度。
  • PM_MenuButtonIndicator:菜单按钮指示器的宽度与小部件高度成的比例。
  • PM_ButtonShiftHorizo​​ntal:按钮按下时,按钮的水平内容移位。
  • PM_ButtonShiftVertical:按钮按下时按钮的垂直内容移位。
  • PM_DefaultFrameWidth:默认框架宽度(通常为 2)。
  • PM_SpinBoxFrameWidth:微调框的框架宽度,默认为 PM_DefaultFrameWidth
  • PM_ComboBoxFrameWidth:组合框的边框宽度,默认为 PM_DefaultFrameWidth
  • PM_MdiSubWindowFrameWidth:MDI 窗口的框架宽度。
  • PM_MdiSubWindowMinimizedWidth:最小化 MDI 窗口的宽度。
  • PM_LayoutLeftMargin:QLayout 的默认左边距。
  • PM_LayoutTopMargin:QLayout 的默认上边距。
  • PM_LayoutRightMargin:QLayout 的默认右边距。
  • PM_LayoutBottomMargin:QLayout 的默认下边距。
  • PM_LayoutHorizo​​ntalSpacing:QLayout 的默认水平间距。
  • PM_LayoutVerticalSpacing:QLayout 的默认垂直间距。
  • PM_MaximumDragDistance:拖动时鼠标和滚动条之间允许的最大距离。超过指定距离会导致滑块跳回原来的位置; -1 值禁用此行为。
  • PM_ScrollBarExtent:垂直滚动条的宽度和水平滚动条的高度。
  • PM_ScrollBarSliderMin:垂直滚动条滑块的最小高度和水平滚动条滑块的最小宽度。
  • PM_SliderThickness:滑块总厚度。
  • PM_SliderControlThickness:滑块手柄的厚度。
  • PM_SliderLength:滑块的长度。
  • PM_SliderTickmarkOffset:刻度线和滑块之间的偏移量。
  • PM_SliderSpaceAvailable:滑块移动的可用空间。
  • PM_DockWidgetSeparatorExtent:水平停靠窗口中分隔符的宽度和垂直停靠窗口中分隔符的高度。
  • PM_DockWidgetHandleExtent:水平停靠窗口中句柄的宽度和垂直停靠窗口中句柄的高度。
  • PM_DockWidgetFrameWidth:停靠窗口的框架宽度。
  • PM_DockWidgetTitleMargin:停靠窗口标题的边距。
  • PM_MenuBarPanelWidth:菜单栏的边框宽度,默认为 PM_DefaultFrameWidth
  • PM_MenuBarItemSpacing:菜单栏项目之间的间距。
  • PM_MenuBarHMargin:菜单栏项目和栏的左/右之间的间距。
  • PM_MenuBarVMargin:菜单栏项目和栏顶部/底部之间的间距。
  • PM_ToolBarFrameWidth:工具栏周围框架的宽度。
  • PM_ToolBarHandleExtent:水平工具栏中工具栏手柄的宽度和垂直工具栏中手柄的高度。
  • PM_ToolBarItemMargin:工具栏框架和项目之间的间距。
  • PM_ToolBarItemSpacing:工具栏项目之间的间距。
  • PM_ToolBarSeparatorExtent:水平工具栏中的工具栏分隔符的宽度和垂直工具栏中的分隔符的高度。
  • PM_ToolBarExtensionExtent:工具栏扩展按钮在水平工具栏中的宽度和按钮在垂直工具栏中的高度。
  • PM_TabBarTabOverlap:选项卡应重叠的像素数。
  • PM_TabBarTabHSpace:额外的空间添加到标签宽度。
  • PM_TabBarTabVSpace:额外的空间添加到标签高度。
  • PM_TabBarBaseHeight:标签栏和标签页之间区域的高度。
  • PM_TabBarBaseOverlap:标签栏与标签栏底部重叠的像素数。
  • PM_TabBarScrollButtonWidth
  • PM_TabBarTabShiftHorizo​​ntal:选择选项卡时的水平像素移位。
  • PM_TabBarTabShiftVertical:选择选项卡时的垂直像素偏移。
  • PM_ProgressBarChunkWidth:进度条指示器中块的宽度。
  • PM_SplitterWidth:分隔器的宽度。
  • PM_TitleBarHeight:标题栏的高度。
  • PM_IndicatorWidth:复选框指示器的宽度。
  • PM_IndicatorHeight:复选框指示器的高度。
  • PM_ExclusiveIndicatorWidth:单选按钮指示器的宽度。
  • PM_ExclusiveIndicatorHeight:单选按钮指示器的高度。
  • PM_MenuPanelWidth:QMenu 的边框宽度(适用于所有边)。
  • PM_MenuHMargin:QMenu 的附加边框(用于左侧和右侧)。
  • PM_MenuVMargin:QMenu 的附加边框(用于底部和顶部)。
  • PM_MenuScrollerHeight:QMenu 中滚动区域的高度。
  • PM_MenuTearoffHeight:QMenu 中脱离区域的高度。
  • PM_MenuDesktopFrameWidth:桌面菜单的边框宽度。
  • PM_HeaderMarkSize:标题中排序指示符的大小。
  • PM_HeaderGripMargin:标题中调整大小夹点的大小。
  • PM_HeaderMargin:排序指示器和文本之间的边距大小。
  • PM_SpinBoxSliderHeight:可选微调框滑块的高度。
  • PM_ToolBarIconSize:默认工具栏图标大小。
  • PM_SmallIconSize:默认小图标大小。
  • PM_LargeIconSize :默认大图标大小。
  • PM_FocusFrameHMargin:水平边距,焦点框将超出窗口小部件。
  • PM_FocusFrameVMargin:垂直边距,焦点框将超出窗口小部件。
  • PM_IconViewIconSize:图标视图中图标的默认大小。
  • PM_ListViewIconSize:列表视图中图标的默认大小。
  • PM_ToolTipLabelFrameWidth:工具提示标签的框架宽度。
  • PM_CheckBoxLabelSpacing:复选框指示器与其标签之间的间距。
  • PM_RadioButtonLabelSpacing:单选按钮指示器与其标签之间的间距。
  • PM_TabBarIconSize:标签栏的默认图标大小。
  • PM_SizeGripSize:大小夹点的大小。
  • PM_MessageBoxIconSize:消息框中标准图标的大小
  • PM_ButtonIconSize:按钮图标的默认大小
  • PM_TextCursorWidth:行编辑或文本编辑时光标的宽度
  • PM_TabBar_ScrollButtonOverlap:标签栏中左右按钮之间的距离。
  • PM_TabClos​​eIndicatorWidth:选项卡栏中选项卡上关闭按钮的默认宽度。
  • PM_TabClos​​eIndicatorHeight:选项卡栏中选项卡上关闭按钮的默认高度。
  • PM_ScrollView_ScrollBarSpacing:设置了 SH_ScrollView_FrameOnlyAroundContents 的框架和滚动条之间的距离。
  • PM_ScrollView_ScrollBarOverlap:滚动条与滚动内容的重叠
  • PM_SubMenuOverlap:子菜单与其父级之间的水平重叠。
  • PM_TreeViewIndentation:树视图中项目的缩进。
  • PM_HeaderDefaultSectionSizeHorizo​​ntal:水平表头中节的默认大小。
  • PM_HeaderDefaultSectionSizeVertical:垂直表头中节的默认大小。
  • PM_TitleBarButtonIconSize:标题栏上按钮图标的大小。
  • PM_TitleBarButtonSize:标题栏上按钮的大小。
  • PM_LineEditIconSize:行编辑中图标的默认大小。
  • PM_CustomBase:自定义像素度​​量的基础值,自定义值必须大于此值。

5、enum QStyle::PrimitiveElement:此枚举描述了各种原始元素。

  • PE_PanelButtonCommand:用于触发动作(QAction)的按钮,例如 QPushButton。
  • PE_FrameDefaultButton:框架围绕的默认按钮,例如在一个对话框中。
  • PE_PanelButtonBevel:带有按钮斜面的通用面板。
  • PE_PanelButtonTool:工具按钮的面板,与 QToolButton 一起使用。
  • PE_PanelLineEdit:QLineEdit 的面板。
  • PE_IndicatorButtonDropDown:下拉按钮的指示符,例如显示菜单的工具按钮。
  • PE_FrameFocusRect:通用焦点指示器。
  • PE_IndicatorArrowUp:通用向上箭头。
  • PE_IndicatorArrowDown:通用向下箭头。
  • PE_IndicatorArrowRight:通用右箭头。
  • PE_IndicatorArrowLeft:通用左箭头。
  • PE_IndicatorSpinUp:微调框(QSpinBox)的向上符号。
  • PE_IndicatorSpinDown:微调框的向下符号。
  • PE_IndicatorSpinPlus:微调框的加(+)号。
  • PE_IndicatorSpinMinus:微调框的减(-)号。
  • PE_IndicatorItemViewItemCheck:视图项的开/关指示器。
  • PE_IndicatorCheckBox:开/关指示器,例如,QCheckBox。
  • PE_IndicatorRadioButton:独占开/关指示器,例如,QRadioButton。
  • PE_IndicatorDockWidgetResizeHandle:调整停靠窗口的句柄。
  • PE_Frame:通用框架
  • PE_FrameMenu:用于弹出窗口/菜单 QMenu 的框架 。
  • PE_PanelMenuBar:菜单栏面板。
  • PE_PanelScrollAreaCorner:位于滚动区域右下角(或左下角)的面板。
  • PE_FrameDockWidget:用于停靠窗口和工具栏的面板框架。
  • PE_FrameTabWidget:用于 QTabWidget 的框架。
  • PE_FrameLineEdit:用于行编辑的面板框架。
  • PE_FrameGroupBox:分组框的面板框架。
  • PE_FrameButtonBevel:按钮斜面的面板框架。
  • PE_FrameButtonTool:工具按钮的面板框架。
  • PE_IndicatorHeaderArrow:用于指示对列表或表头的排序箭头。
  • PE_FrameStatusBarItem:QStatusBar 的框架。
  • PE_FrameWindow:MDI 窗口或停靠窗口周围的框架。
  • PE_IndicatorMenuCheckMark:菜单中使用的复选标记。
  • PE_IndicatorProgressChunk:进度条 QProgressBar 指示器。
  • PE_IndicatorBranch:用于在树视图中表示树的分支的行。
  • PE_IndicatorToolBarHandle:工具栏的句柄。
  • PE_IndicatorToolBarSeparator:工具栏中的分隔符。
  • PE_PanelToolBar:工具栏面板。
  • PE_PanelTipLabel:提示标签的面板。
  • PE_FrameTabBarBase:为标签栏绘制的框架,通常为不属于标签小部件的标签栏绘制。
  • PE_IndicatorTabTearLeft:当有很多选项卡时,一个选项卡在可见选项卡栏左侧部分向外滚动的指示器。
  • PE_IndicatorTabTearRight:当有许多选项卡时,一个选项卡在可见选项卡栏右侧部分滚动的指示器。
  • PE_IndicatorColumnViewArrow:QColumnView 中的箭头。
  • PE_Widget:普通的 QWidget。
  • PE_IndicatorItemViewItemDrop:用于显示在项目视图中的拖放操作期间项目视图中的项目将要被放置的位置的指示器。
  • PE_PanelItemViewItem:项目视图中项目的背景。
  • PE_PanelItemViewRow:项目视图中一行的背景。
  • PE_PanelStatusBar:状态栏面板。
  • PE_IndicatorTabClos​​e:标签栏上的关闭按钮。
  • PE_PanelMenu:菜单面板。
  • PE_CustomBase:自定义原始元素的基础值,高于此的所有值都保留供自定义使用。自定义值必须大于此值。

6、enum QStyle::RequestSoftwareInputPanel:此枚举描述了在什么情况下可以输入的小部件将请求软件输入面板。

  • RSIP_OnMouseClickAndAlreadyFocused:如果用户单击窗口小部件,则请求输入面板,但前提是它已经获得焦点。
  • RSIP_OnMouseClick:如果用户单击小部件,则请求输入面板。

7、enum QStyle::StandardPixmap:此枚举描述了可用的标准像素图。标准像素图是可以遵循某些现有 GUI 样式或指南的像素图。

  • SP_TitleBarMinButton:最小化标题栏上的按钮(例如,在 QMdiSubWindow 中)。
  • SP_TitleBarMenuButton:标题栏上的菜单按钮。
  • SP_TitleBarMaxButton:最大化标题栏上的按钮。
  • SP_TitleBarCloseButton:关闭标题栏上的按钮。
  • SP_TitleBarNormalButton:标题栏上的普通(恢复)按钮。
  • SP_TitleBarShadeButton:标题栏上的阴影按钮。
  • SP_TitleBarUnshadeButton:取消标题栏上的按钮。
  • SP_TitleBarContextHelpButton:标题栏上的上下文帮助按钮。
  • SP_MessageBoxInformation:“信息”图标。
  • SP_MessageBoxWarning:“警告”图标。
  • SP_MessageBoxCritical:“关键”图标。
  • SP_MessageBoxQuestion:“问题”图标。
  • SP_DesktopIcon:“桌面”图标。
  • SP_TrashIcon:“垃圾”图标。
  • SP_ComputerIcon:“我的电脑”图标。
  • SP_DriveFDIcon:软盘图标。
  • SP_DriveHDIcon:硬盘图标。
  • SP_DriveCDIcon:CD 图标。
  • SP_DriveDVDIcon:DVD 图标。
  • SP_DriveNetIcon:网络图标。
  • SP_DirHomeIcon:主目录图标。
  • SP_DirOpenIcon:打开的目录图标。
  • SP_DirClosedIcon:关闭的目录图标。
  • SP_DirIcon:目录图标。
  • SP_DirLinkIcon:指向目录图标的链接。
  • SP_DirLinkOpenIcon:打开目录图标的链接。
  • SP_FileIcon:文件图标。
  • SP_FileLinkIcon:文件图标的链接。
  • SP_FileDialogStart:文件对话框中的“开始”图标。
  • SP_FileDialogEnd:文件对话框中的“结束”图标。
  • SP_FileDialogToParent:文件对话框中的“父目录”图标。
  • SP_FileDialogNewFolder:文件对话框中的“创建新文件夹”图标。
  • SP_FileDialogDetailedView:文件对话框中的详细视图图标。
  • SP_FileDialogInfoView:文件对话框中的文件信息图标。
  • SP_FileDialogContentsView:文件对话框中的内容视图图标。
  • SP_FileDialogListView:文件对话框中的列表视图图标。
  • SP_FileDialogBack:文件对话框中的后退箭头。
  • SP_DockWidgetCloseButton:停靠窗口QDockWidget上的关闭按钮。
  • SP_ToolBarHorizo​​ntalExtensionButton:水平工具栏的扩展按钮。
  • SP_ToolBarVerticalExtensionButton:垂直工具栏的扩展按钮。
  • SP_DialogOkButton:QDialogBu​​ttonBox 中标准确定按钮的图标。
  • SP_DialogCancelButton:QDialogBu​​ttonBox 中标准取消按钮的图标。
  • SP_DialogHelpButton:QDialogBu​​ttonBox 中标准帮助按钮的图标。
  • SP_DialogOpenButton:QDialogBu​​ttonBox 中标准打开按钮的图标。
  • SP_DialogSaveButton:QDialogBu​​ttonBox 中标准保存按钮的图标。
  • SP_DialogCloseButton:QDialogBu​​ttonBox 中标准关闭按钮的图标。
  • SP_DialogApplyButton:QDialogBu​​ttonBox 中标准应用按钮的图标。
  • SP_DialogResetButton:QDialogBu​​ttonBox 中标准重置按钮的图标。
  • SP_DialogDiscardButton:QDialogBu​​ttonBox 中标准放弃按钮的图标。
  • SP_DialogYesButton:QDialogBu​​ttonBox 中标准 Yes 按钮的图标。
  • SP_DialogNoButton:QDialogBu​​ttonBox 中标准 No 按钮的图标。
  • SP_ArrowUp:向上箭头图标。
  • SP_ArrowDown:向下箭头图标。
  • SP_ArrowLeft:向左箭头图标。
  • SP_ArrowRight:向右箭头图标。
  • SP_ArrowBack:当前布局方向为 Qt::LeftToRight 时等价于 SP_ArrowLeft,否则为 SP_ArrowRight
  • SP_ArrowForward:当前布局方向为 Qt::LeftToRight 时等价于 SP_ArrowRight,否则为 SP_ArrowLeft
  • SP_CommandLink:用于指示 Vista 风格的命令链接字形的图标。
  • SP_VistaShield:用于在 Windows Vista 上指示 UAC 提示的图标。这将在所有其他平台上返回一个空像素图或图标。
  • SP_BrowserReload:指示当前页面应该重新加载的图标。
  • SP_BrowserStop:指示页面加载应该停止的图标。
  • SP_MediaPlay:指示媒体应该开始播放的图标。
  • SP_MediaStop:指示媒体应该停止播放的图标。
  • SP_MediaPause:指示媒体应该暂停播放的图标。
  • SP_MediaSkipForward:指示媒体应该向前跳过的图标。
  • SP_MediaSkipBackward:指示媒体应该向后跳过的图标。
  • SP_MediaSeekForward:指示媒体应该向前搜索的图标。
  • SP_MediaSeekBackward:指示媒体应该向后搜索的图标。
  • SP_MediaVolume:表示音量控制的图标。
  • SP_MediaVolumeMuted:表示静音音量控制的图标。
  • SP_LineEditClearButton:QLineEdit 中标准清除按钮的图标。
  • SP_DialogYesToAllButton:QDialogBu​​ttonBox 中标准 YesToAll 按钮的图标。
  • SP_DialogNoToAllButton:QDialogBu​​ttonBox 中标准 NoToAll 按钮的图标。
  • SP_DialogSaveAllButton:QDialogBu​​ttonBox 中标准 SaveAll 按钮的图标。
  • SP_DialogAbortButton:QDialogBu​​ttonBox 中标准中止按钮的图标。
  • SP_DialogRetryButton:QDialogBu​​ttonBox 中标准重试按钮的图标。
  • SP_DialogIgnoreButton:QDialogBu​​ttonBox 中标准忽略按钮的图标。
  • SP_RestoreDefaultsButton:QDialogBu​​ttonBox 中标准RestoreDefaults 按钮的图标。
  • SP_CustomBase:自定义标准像素图的基础值,自定义值必须大于此值。

8、enum QStyle::StateFlag:此枚举描述了绘制原始元素时使用的标志。并非所有原始元素都使用所有这些标志,并且这些标志对于不同的项目可能意味着不同的东西

  • State_None:小部件没有状态。
  • State_Active:小部件处于活动状态。
  • State_AutoRaise:是否应在工具按钮上使用自动抬起的外观。
  • State_Children:项目视图分支是否有子项。
  • State_DownArrow:指示向下箭头是否应在小部件上可见。
  • State_Editing:是否在小部件上打开了编辑器。
  • State_Enabled:小部件是否已启用。
  • State_HasEditFocus:小部件当前是否具有编辑焦点。
  • State_HasFocus:小部件是否具有焦点。
  • State_Horizo​​ntal:小部件是否水平布局。
  • State_KeyboardFocusChange:是否使用键盘更改了焦点,例如,tab、backtab 或快捷方式。
  • State_MouseOver:小部件是否在鼠标下方。
  • State_NoChange:表示三态复选框。
  • State_Off:是否未 check 小部件。
  • State_On:是否 checked 了小部件。
  • State_Raised:按钮是否被抬起。
  • State_ReadOnly:小部件是否为只读。
  • State_Selected:是否选择了小部件。(如选中了表格的一行)
  • State_Item:由项目视图用来指示是否应绘制水平分支。
  • State_Open:项目视图树分支是否打开。
  • State_Sibling:项目视图是否需要绘制一条垂直线(对于同级而言)。
  • State_Sunken:小部件是凹陷还是按下。
  • State_UpArrow:向上箭头是否应该在小部件上可见。
  • State_Mini:一个迷你风格的 Mac 小部件或按钮。
  • State_Small:Mac 小部件或按钮。

9、enum QStyle::StyleHint:此枚举描述了可用的样式外观提示。

  • SH_EtchDisabledText:禁用的文本像在 Windows 上一样被“蚀刻”(绘制出轮廓 / 重影)。
  • SH_DitherDisabledText:禁用的文本会像在 Motif 上那样抖动。
  • SH_ScrollBar_ContextMenu:滚动条是否有上下文菜单。
  • SH_ScrollBar_MiddleClickAbsolutePosition:一个布尔值。如果为 true,则在滚动条上单击鼠标中键会导致滑块跳到该位置。如果为 false,则忽略中间单击。
  • SH_ScrollBar_LeftClickAbsolutePosition:一个布尔值。如果为 true,左键单击滚动条会使滑块跳到该位置。如果为 false,则左键单击的行为将适用于每个控件。
  • SH_ScrollBar_ScrollWhenPointerLeavesControl:一个布尔值。如果为 true,当单击滚动条的子控件然后按住鼠标按钮并将指针移到滚动条子控件之外时,滚动条会继续滚动。如果为 false,则当指针离开滚动条的子控件时,滚动条停止滚动。
  • SH_ScrollBar_RollBetweenButtons:一个布尔值。如果为 true,当单击滚动条按钮(SC_ScrollBarAddLine SC_ScrollBarSubLine)并拖动到对面的按钮(滚动)时,将按下新按钮并释放旧按钮。当它为 false 时,原始按钮被释放并且没有任何反应(如按钮)。
  • SH_TabBar_Alignment:QTabWidget 中标签的对齐方式。可能的值是 Qt::AlignLeft、Qt::AlignCenter 和 Qt::AlignRight。
  • SH_Header_ArrowAlignment:可能出现在列表或表格标题中的排序指示器的位置。可能的值是 Qt::Alignment 值。
  • SH_Slider_SnapToValue:滑块在移动时捕捉到值,就像在 Windows 上一样。
  • SH_Slider_SloppyKeyEvents:以草率的方式处理按键事件,即在垂直滑块上的左侧减去一行。
  • SH_ProgressDialog_CenterCancelButton:进度对话框的取消按钮对齐中心对齐。
  • SH_ProgressDialog_TextLabelAlignment:对话框中文本标签的对齐方式。在 Windows 上为 Qt::AlignCenter,否则为 Qt::AlignVCenter。
  • SH_PrintDialog_RightAlignButtons:在打印对话框中右对齐按钮。
  • SH_MainWindow_SpaceBelowMenuBar:菜单栏和停靠区之间的一个或两个像素空间,就像在 Windows 上所做的那样。
  • SH_FontDialog_SelectAssociatedText:选择行编辑中的文本,或者当从列表框中选择一个项目时,或者当行编辑获得焦点时,就像在 Windows 上所做的那样。
  • SH_Menu_KeyboardSearch:键入会导致菜单搜索相关项目,否则只考虑助记符。
  • SH_Menu_AllowActiveAndDisabled:允许禁用的菜单项处于活动状态。
  • SH_Menu_SpaceActivatesItem:按空格键激活项目。
  • SH_Menu_SubMenuPopupDelay:打开子菜单前等待的毫秒数(Windows 为 256,Motif 为 96)。
  • SH_Menu_Scrollable:弹出菜单是否必须支持滚动。
  • SH_Menu_SloppySubMenus:弹出菜单是否必须支持用户将鼠标光标移动到子菜单,同时跨越菜单的其他项目。大多数现代桌面平台都支持此功能。
  • SH_Menu_SubMenuUniDirection:如果光标必须向子菜单移动(就像在 macOS 上一样),或者光标可以向任何方向移动,只要它在草率超时之前到达子菜单。
  • SH_Menu_SubMenuUniDirectionFailCount:当 SH_Menu_SubMenuUniDirection 被定义时,此枚举定义了在草率(处理)的子菜单被丢弃之前鼠标移动失败的次数。
  • SH_Menu_SubMenuSloppySelectOtherActions:当鼠标移向一个草率的子菜单时是否应该选择其他操作项。
  • SH_Menu_SubMenuSloppyCloseTimeout:用于关闭草率子菜单的超时。
  • SH_Menu_SubMenuResetWhenReenteringParent:从子子菜单进入父子菜单时,是否应重置草率状态,有效地关闭子子菜单并使当前子菜单处于活动状态。
  • SH_Menu_SubMenuDontStartSloppyOnLeave:当鼠标离开子菜单时,不要启动草率的计时器。
  • SH_ScrollView_FrameOnlyAroundContents:滚动视图是仅围绕内容(如 Motif)绘制框架,还是围绕内容、滚动条和角小部件(如 Windows)绘制框架。
  • SH_MenuBar_AltKeyNavigation:菜单栏项目可通过按 Alt 导航,然后使用箭头键选择所需项目。
  • SH_ComboBox_ListMouseTracking:组合框下拉列表中的鼠标跟踪。
  • SH_Menu_MouseTracking:弹出菜单中的鼠标跟踪。
  • SH_MenuBar_MouseTracking:菜单栏中的鼠标跟踪。
  • SH_Menu_FillScreenWithScroll:滚动弹出窗口是否应按原样填充屏幕滚动。
  • SH_Menu_SelectionWrap:弹出窗口是否应该允许选择换行,即下一个项目应该是第一个项目。
  • SH_ItemView_ChangeHighlightOnFocus:失去焦点时使选定的项目变灰。
  • SH_Widget_ShareActivation:使用浮动无模式对话框打开共享激活。
  • SH_TabBar_SelectMouseType:哪种类型的鼠标事件应该导致一个选项卡被选中。
  • SH_ListViewExpand_SelectMouseType:哪种类型的鼠标事件应该导致列表视图展开被选中。
  • SH_TabBar_PreferNoArrows:标签栏是否应该建议一个大小以防止滚动箭头。
  • SH_ComboBox_Popup:允许弹出框作为组合框下拉菜单。
  • SH_Workspace_FillSpaceOnMaximize:工作区应该最大化客户区。
  • SH_TitleBar_NoBorder:标题栏没有边框。
  • SH_Slider_StopMouseOverSlider:当滑块到达鼠标位置时停止自动重复。
  • SH_BlinkCursorWhenTextSelected:选择文本时光标是否闪烁。
  • SH_RichText_FullWidthSelection:富文本选择是否应该扩展到文档的整个宽度。
  • SH_GroupBox_TextLabelVerticalAlignment:如何垂直对齐组框的文本标签。
  • SH_GroupBox_TextLabelColor:如何绘制组框的文本标签。
  • SH_DialogBu​​ttons_DefaultButton:哪个按钮在对话框的按钮小部件中获得默认状态。
  • SH_ToolBox_SelectedPageTitleBold:QToolBox 中所选页面标题的粗体。
  • SH_LineEdit_PasswordCharacter:用于密码的 Unicode 字符。
  • SH_LineEdit_PasswordMaskDelay:确定在可见字符被密码字符屏蔽之前的延迟,以毫秒为单位。
  • SH_Table_GridLineColor:表格网格的 RGBA 值。
  • SH_UnderlineShortcut:快捷键是否加下划线。
  • SH_SpinBox_AnimateButton:在微调框中按下向上或向下时动画单击。
  • SH_SpinBox_KeyPressAutoRepeatRate:微调框按键的自动重复间隔。
  • SH_SpinBox_ClickAutoRepeatRate:微调框鼠标点击的自动重复间隔。
  • SH_SpinBox_ClickAutoRepeatThreshold:微调框鼠标点击的自动重复阈值。
  • SH_ToolTipLabel_Opacity:一个整数,表示提示标签的不透明度,0 表示完全透明,255 表示完全不透明。
  • SH_DrawMenuBarSeparator:指示菜单栏是否绘制分隔符。
  • SH_TitleBar_ModifyNotification:指示标题栏是否应为已修改的窗口显示“*”。
  • SH_Button_FocusPolicy:按钮的默认焦点策略。
  • SH_MessageBox_UseBorderForButtonSpacing:一个布尔值,指示使用按钮边框(计算为按钮高度的一半)作为消息框中按钮的间距。
  • SH_MessageBox_CenterButtons:一个布尔值,指示消息框中的按钮是否应该居中(QDialogBu​​ttonBox::setCentered())。
  • SH_MessageBox_TextInteractionFlags:一个布尔值,指示消息框中的文本是否应允许用户交互。
  • SH_TitleBar_AutoRaise:一个布尔值,指示标题栏上的控件在鼠标悬停时是否应该更新。
  • SH_ToolButton_PopupDelay:一个 int 表示附加到工具按钮的菜单的弹出延迟(以毫秒为单位)。
  • SH_FocusFrame_Mask:焦点框的遮罩。
  • SH_RubberBand_Mask:橡皮筋的掩码。
  • SH_WindowFrame_Mask:窗口框架的掩码。
  • SH_SpinControls_DisableOnBounds:确定当达到旋转范围边界时旋转控件是否显示为禁用。
  • SH_Dial_BackgroundRole:为表盘部件定义样式的首选背景角色(如 QPalette::ColorRole)。
  • SH_ComboBox_LayoutDirection:组合框的布局方向。默认情况下,它应该与 QStyleOption::direction 变量所指示的相同。
  • SH_ItemView_EllipsisLocation:应该为太长而无法放入视图项目的项目文本添加省略号的位置。
  • SH_ItemView_ShowDecorationSelected:当一个项目视图中的项目被选中时,同时高亮分支或其他装饰。
  • SH_ItemView_ActivateItemOnSingleClick:当用户单击项目视图中的项目时发出激活信号。否则,当用户双击项目时会发出信号。
  • SH_Slider_AbsoluteSetButtons:哪些鼠标按钮会导致滑块将值设置为单击的位置。
  • SH_Slider_PageSetButtons:哪些鼠标按钮使滑块对值进行分页。
  • SH_TabBar_ElideMode:标签栏的默认省略样式。
  • SH_DialogBu​​ttonLayout:控制按钮在 QDialogBu​​ttonBox 中的布局方式,返回 QDialogBu​​ttonBox::ButtonLayout 枚举。
  • SH_WizardStyle:控制 QWizard 的外观。返回一个 QWizard::WizardStyle 枚举。
  • SH_FormLayoutWrapPolicy:为行在 QFormLayout 中的包装方式提供默认值。返回一个 QFormLayout::RowWrapPolicy 枚举。
  • SH_FormLayoutFieldGrowthPolicy:为字段如何在 QFormLayout 中增长提供默认值。返回 QFormLayout::FieldGrowthPolicy 枚举。
  • SH_FormLayoutFormAlignment:为 QFormLayout 如何在可用空间内对齐其内容提供默认值。返回一个 Qt::Alignment 枚举。
  • SH_FormLayoutLabelAlignment:为 QFormLayout 如何在可用空间内对齐标签提供默认值。返回一个 Qt::Alignment 枚举。
  • SH_ItemView_ArrowKeysNavigateIntoChildren:控制树视图在展​​开并按下右箭头键时是否选择第一个子视图。
  • SH_ComboBox_PopupFrameStyle:绘制组合框弹出菜单时使用的框架样式。
  • SH_DialogBu​​ttonBox_ButtonsHaveIcons:指示QDialogBu​​ttonBox中的StandardButtons是否应该有图标。
  • SH_ItemView_MovementWithoutUpdatingSelection:项目视图能够在不改变选择的情况下指示当前项目。
  • SH_ToolTip_Mask:工具提示的掩码。
  • SH_FocusFrame_AboveWidget:FocusFrame 堆叠在它“关注”的小部件之上。
  • SH_TextControl_FocusIndicatorTextCharFormat:指定用于突出显示在 QTextBrowser 中的富文本文档中的焦点锚点的文本格式。格式必须是在 QStyleHintReturnVariant 返回值的变体中返回的 QTextCharFormat。 QTextFormat::OutlinePen 属性用于轮廓,QTextFormat::BackgroundBrush 用于突出显示区域的背景。
  • SH_Menu_FlashTriggeredItem:Flash 触发项。
  • SH_Menu_FadeOutOnHide:淡出菜单而不是立即隐藏它。
  • SH_TabWidget_DefaultTabPosition:标签栏在标签小部件中的默认位置。
  • SH_ToolBar_Movable:确定工具栏是否默认可移动。
  • SH_ItemView_PaintAlternatingRowColorsForEmptyArea:QTreeView 是否为没有任何项目的区域绘制交替的行颜色。
  • SH_Menu_Mask:弹出菜单的掩码。
  • SH_ItemView_DrawDelegateFrame:确定是否应该有一个代表小部件的框架。
  • SH_TabBar_CloseButtonPosition:确定关闭按钮在选项卡栏中的选项卡上的位置。
  • SH_DockWidget_ButtonsHaveFrame:确定dockwidget按钮是否应该有框架。默认为真。
  • SH_ToolButtonStyle:确定使用 Qt::ToolButtonFollowStyle 的工具按钮的默认系统样式。
  • SH_RequestSoftwareInputPanel:确定输入小部件何时应请求软件输入面板。返回 RequestSoftwareInputPanel 类型的枚举。
  • SH_ScrollBar_Transient:确定样式是否支持瞬态滚动条。滚动内容时会出现瞬态滚动条,不再需要时会消失。
  • SH_Menu_SupportsSections:确定样式是在菜单中显示部分还是将它们视为普通分隔符。部分是带有文本和图标提示的分隔符。
  • SH_ToolTip_WakeUpDelay:确定显示工具提示之前的延迟,以毫秒为单位。
  • SH_ToolTip_FallAsleepDelay:确定在显示工具提示时需要新的唤醒时间之前的延迟(以毫秒为单位)(注意:显示,未隐藏)。当不需要新的唤醒时,几乎会立即显示用户请求的工具提示。
  • SH_Splitter_OpaqueResize:确定小部件是否在交互式移动拆分器时动态(不透明地)调整大小。
  • SH_TabBar_ChangeCurrentDelay:确定在拖动标签栏时更改当前标签之前的延迟,以毫秒为单位。
  • SH_ItemView_ScrollMode:样式指定的默认垂直和水平滚动模式。可以用 QAbstractItemView::setVerticalScrollMode() 和 QAbstractItemView::setHorizo​​ntalScrollMode() 覆盖。
  • SH_TitleBar_ShowToolTipsOnButtons:确定工具提示是否显示在窗口标题栏按钮上。例如,Mac 样式将其设置为 false。
  • SH_Widget_Animation_Duration:确定动画应该持续多长时间(以毫秒为单位)。等于零的值意味着动画将被禁用。
  • SH_ComboBox_AllowWheelScrolling:确定鼠标滚轮是否可用于在 QComboBox 内滚动。 默认情况下,除 Mac 样式之外的所有样式都启用此功能。
  • SH_SpinBox_ButtonsInsideFrame:确定旋转框按钮是否在行编辑框内。
  • SH_SpinBox_StepModifier:确定哪个 Qt::KeyboardModifier 增加了 QAbstractSpinBox 的步进率。可能的值是 Qt::NoModifier、Qt::ControlModifier(默认)或 Qt::ShiftModifier。 Qt::NoModifier 禁用此功能。
  • SH_TabBar_AllowWheelScrolling:确定是否可以使用鼠标滚轮在 QTabBar 的选项卡之间循环。
  • SH_CustomBase:自定义样式提示的基本值。自定义值必须大于此值。

10、enum QStyle::SubControl:此枚举描述了可用的子控件。子控件是复杂控件 (ComplexControl) 中的控件元素。

  • SC_None:不匹配其他子控件的特殊值。
  • SC_ScrollBarAddLine:滚动条QScrollBar加线(即向下/向右箭头)。
  • SC_ScrollBarSubLine:滚动条减线(即向上/向左箭头)。
  • SC_ScrollBarAddPage:滚动条添加页面(即向下翻页)。
  • SC_ScrollBarSubPage:滚动条子页面(即向上翻页)。
  • SC_ScrollBarFirst:滚动条第一行(即首页)。
  • SC_ScrollBarLast:滚动条最后一行(即结束)。
  • SC_ScrollBarSlider:滚动条滑块句柄。
  • SC_ScrollBarGroove:特殊子控件,包含滑块手柄可以移动的区域。
  • SC_SpinBoxUp:QSpinBox 向上/增加。
  • SC_SpinBoxDown:SpinBox 向下/减少。
  • SC_SpinBoxFrame:SpinBox 框架。
  • SC_SpinBoxEditField:SpinBox 编辑字段。
  • SC_ComboBoxEditField:QComboBox 编辑字段。
  • SC_ComboBoxArrow:QComboBox 箭头按钮。
  • SC_ComboBoxFrame:QComboBox 框架。
  • SC_ComboBoxListBoxPopup::QComboBox 弹出的参考矩形。用于计算弹出窗口的位置。
  • SC_SliderGroove:特殊子控件,包含滑块手柄可以移动的区域。
  • SC_SliderHandle:滑块握把。
  • SC_SliderTickmarks:滑块刻度线。
  • SC_ToolButton:工具按钮(另见 QToolButton)。
  • SC_ToolButtonMenu:用于在工具按钮中打开弹出菜单的子控件。
  • SC_TitleBarSysMenu:系统菜单按钮(即恢复、关闭等)。
  • SC_TitleBarMinButton:最小化按钮。
  • SC_TitleBarMaxButton:最大化按钮。
  • SC_TitleBarCloseButton:关闭按钮。
  • SC_TitleBarLabel:窗口标题标签。
  • SC_TitleBarNormalButton:正常(恢复)按钮。
  • SC_TitleBarShadeButton:阴影按钮。
  • SC_TitleBarUnshadeButton:取消阴影按钮。
  • SC_TitleBarContextHelpButton:上下文帮助按钮。
  • SC_DialHandle:表盘的握把。
  • SC_DialGroove:表盘凹槽。
  • SC_DialTickmarks:刻度盘的刻度。
  • SC_GroupBoxFrame:组框的框架。
  • SC_GroupBoxLabel:组框的标题。
  • SC_GroupBoxCheckBox:组框的可选复选框。
  • SC_GroupBoxContents:组框内容。
  • SC_MdiNormalButton:菜单栏中 MDI 子窗口的普通按钮。
  • SC_MdiMinButton:菜单栏中 MDI 子窗口的最小化按钮。
  • SC_MdiCloseButton:菜单栏中 MDI 子窗口的关闭按钮。
  • SC_All:匹配所有子控件的特殊值。

11、enum QStyle::SubElement:此枚举表示小部件的子区域 / 子元素。样式实现使用这些区域来绘制小部件的不同部分。

  • SE_PushButtonContents:包含标签的区域(带有文本或像素图的图标)。
  • SE_PushButtonFocusRect:焦点矩形区域(通常大于内容矩形)。
  • SE_PushButtonLayoutItem:计算父布局的区域。
  • SE_PushButtonBevel:用于按钮斜面的区域。
  • SE_CheckBoxIndicator:状态指示器区域(例如,复选标记)。
  • SE_CheckBoxContents:标签区域(文本或像素图)。
  • SE_CheckBoxFocusRect:焦点指示区域。
  • SE_CheckBoxClickRect:可点击区域,默认为 SE_CheckBoxFocusRect
  • SE_CheckBoxLayoutItem:计算父布局的区域。
  • SE_DateTimeEditLayoutItem:计算父布局的区域。
  • SE_RadioButtonIndicator:状态指示器区域。
  • SE_RadioButtonContents:标签区域。
  • SE_RadioButtonFocusRect:焦点指示区域。
  • SE_RadioButtonClickRect:可点击区域,默认为 SE_RadioButtonFocusRect
  • SE_RadioButtonLayoutItem:计算父布局的区域。
  • SE_ComboBoxFocusRect:焦点指示区域。
  • SE_SliderFocusRect:焦点指示区域。
  • SE_SliderLayoutItem:计算父布局的区域。
  • SE_SpinBoxLayoutItem:计算父布局的区域。
  • SE_ProgressBarGroove:凹槽区域。
  • SE_ProgressBarContents:进度指示器区域。
  • SE_ProgressBarLabel:文本标签区域。
  • SE_ProgressBarLayoutItem:计算父布局的区域。
  • SE_FrameContents:框架内容的区域。
  • SE_ShapedFrameContents:使用 QStyleOptionFrame 中的形状的 QFrame 内容区域。
  • SE_FrameLayoutItem:计算父布局的区域。
  • SE_HeaderArrow:标题排序指示器的区域。
  • SE_HeaderLabel:标题中标签的区域。
  • SE_LabelLayoutItem:计算父布局的区域。
  • SE_LineEditContents:用于行编辑内容的区域。
  • SE_TabWidgetLeftCorner:选项卡小部件中左角小部件的区域。
  • SE_TabWidgetRightCorner:选项卡小部件中右角小部件的区域。
  • SE_TabWidgetTabBar:选项卡小部件中选项卡栏小部件的区域。
  • SE_TabWidgetTabContents:选项卡小部件内容的区域。
  • SE_TabWidgetTabPane:选项卡小部件窗格的区域。
  • SE_TabWidgetLayoutItem:计算父布局的区域。
  • SE_ToolBoxTabContents:工具箱标签的图标和标签区域。
  • SE_ToolButtonLayoutItem:计算父布局的区域。
  • SE_ItemViewItemCheckIndicator:用于查看项目复选标记的区域。
  • SE_TabBarTearIndicatorLeft:位于标签栏左侧的撕裂指示器区域,带有滚动箭头。
  • SE_TabBarTearIndicatorRight:带有滚动箭头的标签栏右侧的撕裂指示器区域。
  • SE_TabBarScrollLeftButton:带有滚动按钮​​的标签栏上的左滚动按钮区域。
  • SE_TabBarScrollRightButton:带有滚动按钮​​的标签栏上的滚动右键区域。
  • SE_TreeViewDisclosureItem:树枝中实际披露项目的区域。
  • SE_GroupBoxLayoutItem:计算父布局的区域。
  • SE_DockWidgetFloatButton:停靠小部件的浮动按钮。
  • SE_DockWidgetTitleBarText:停靠小部件标题的文本边界。
  • SE_DockWidgetCloseButton:停靠小部件的关闭按钮。
  • SE_DockWidgetIcon:停靠小部件的图标。
  • SE_ComboBoxLayoutItem:计算父布局的区域。
  • SE_ItemViewItemDecoration:视图项装饰(图标)的区域。
  • SE_ItemViewItemText:视图项文本的区域。
  • SE_ItemViewItemFocusRect:视图项的焦点矩形区域。
  • SE_TabBarTabLeftButton:小部件的区域,位于标签栏的标签左侧。
  • SE_TabBarTabRightButton:小部件的区域,位于标签栏的标签右侧。
  • SE_TabBarTabText:选项卡栏中的选项卡上的文本区域。
  • SE_ToolBarHandle:工具栏手柄的区域。
  • SE_CustomBase:自定义子元素的基础值,自定义值必须大于此值。

三、成员函数

1、【static】QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle)

根据指定的对齐方式和方向,返回与给定矩形对齐的指定大小的新矩形。

2、int combinedLayoutSpacing(QSizePolicy::ControlTypes controls1, QSizePolicy::ControlTypes controls2, Qt::Orientation orientation, QStyleOption *option = nullptr, QWidget *widget = nullptr)

返回布局中控件1 和控件2 之间应使用的间距。orientation 指定控件是并排布局还是垂直堆叠。option 参数可用于传递有关父窗口小部件的额外信息。

controls1 和 controls2 是零个或多个控件类型的 OR 组合。

该函数由布局系统调用。仅当 PM_LayoutHorizontalSpacing PM_LayoutVerticalSpacing 返回负值时才使用它。

3、【纯虚函数】void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr)

使用 painter 和 option 指定的样式选项绘制 control。widget 可用于辅助绘制控件。

option 参数是一个指向 QStyleOptionComplex 对象的指针,可以使用 qstyleoption_cast() 函数将其转换为正确的子类。option 的 rect 成员必须在逻辑坐标中。

此函数的重新实现应在调用 drawPrimitive() 或 drawControl() 函数之前使用 visualRect() 将逻辑坐标更改为屏幕坐标。

4、【纯虚函数】void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr)

使用 painter 和 option 指定的样式绘制 element。

option 参数是一个指向 QStyleOption 对象的指针,可以使用 qstyleoption_cast() 函数将其转换为正确的子类。

5、void drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap)

在矩形 rectangle 中绘制像素图 pixmap。

6、void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole)

在矩形 rectangle 中绘制文本 text。

如果指定了显式 textRole,则使用该调色板颜色绘制文本。enabled参数表示该项是否启用。

7、【纯虚函数】void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr)

使用 painter 和 option 指定的样式绘制 element。

8、【纯虚函数】QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option)

返回 pixmap 的副本,其样式符合指定的 iconMode 并考虑到 option 指定的调色板。

9、【纯虚函数】QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget = nullptr)

返回复杂控件 control 中位置 position 的子控件。该位置以屏幕坐标表示。

10、QRect itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap)

返回矩形 rectangle 内根据对齐方式 alignment 绘制指定像素图的区域。

11、QRect itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text)

返回矩形 rectangle 内的区域,根据指定的字体度量 metrics 和对齐方式在其中绘制提供的文本。 enabled 参数指示是否启用关联项。

如果矩形 rectangle 大于渲染文本所需的区域,则返回的矩形将根据指定的对齐方式在矩形内偏移。例如,如果对齐方式是 Qt::AlignCenter,则返回的矩形将在矩形内居中。如果给定的矩形小于所需的区域,则返回的矩形将是足以呈现文本的最小矩形。

12、【纯虚函数】int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr)

返回布局中 control1 和 control2 之间应使用的间距。orientation 指定控件是并排布局还是垂直堆叠。option 参数可用于传递有关父窗口小部件的额外信息。

该函数由布局系统调用。 仅当 PM_LayoutHorizontalSpacing PM_LayoutVerticalSpacing 返回负值时才使用它。

13、QString name()

返回样式的名称。该值可用于使用 QStyleFactory::create() 创建样式。

14、【纯虚函数】int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr)

返回给定像素度量的值。

15、void polish(QWidget *widget)

初始化 widget 的外观。

在完全创建之后但就在它第一次显示之前的某个时间,每个小部件都会调用此函数。

      void polish(QApplication *application)

应用程序对象的后期初始化。

      void polish(QPalette &palette)

根据调色板的样式特定要求(如果有)更改调色板。

      void unpolish(QWidget *widget)

取消初始化给定小部件的外观。

此函数与 polish() 对应。 每当样式动态更改时,每个抛光的小部件都会调用它;前一种风格必须先取消其设置,然后新风格才能再次对其进行抛光。

      void unpolish(QApplication *application)

取消初始化应用程序。

16、const QStyle * proxy()

返回此样式的当前代理。默认情况下,大多数样式会自行返回。但是,当使用代理样式时,它将允许样式回调到其代理中。

17、【纯虚函数】QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget = nullptr)

根据提供的 contentsSize 返回由指定 option 和 type 描述的元素的大小。

option 参数是指向 QStyleOption 或其子类之一的指针。 可以使用 qstyleoption_cast() 函数将该选项转换为适当的类型。小部件是一个可选参数,可以包含用于计算大小的额外信息。

有关适当的选项转换:

  • CT_CheckBox:QStyleOptionButton
  • CT_ComboBox:QStyleOptionComboBox
  • CT_GroupBox:QStyleOptionGroupBox
  • CT_HeaderSection:QStyleOptionHeader
  • CT_ItemViewItem:QStyleOptionViewItem
  • CT_LineEdit:QStyleOptionFrame
  • CT_MdiControls:QStyleOptionComplex
  • CT_Menu:QStyleOption
  • CT_MenuItem:QStyleOptionMenuItem
  • CT_MenuBar:QStyleOptionMenuItem
  • CT_MenuBarItem:QStyleOptionMenuItem
  • CT_ProgressBar:QStyleOptionProgressBar
  • CT_PushButton:QStyleOptionButton
  • CT_RadioButton:QStyleOptionButton
  • CT_ScrollBar:QStyleOptionSlider
  • CT_SizeGrip:QStyleOption
  • CT_Slider:QStyleOptionSlider
  • CT_SpinBox:QStyleOptionSpinBox
  • CT_Splitter:QStyleOption
  • CT_TabBarTab:QStyleOptionTab
  • CT_TabWidget:QStyleOptionTabWidgetFrame
  • CT_ToolButton:QStyleOptionToolButton

18、【static】int sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown = false)

将逻辑值logicalValue 转换为像素位置。min 参数映射到 0,max 映射到 span,其他值在两者之间均匀分布。

此函数可以处理整个整数范围而不会溢出,前提是 span 小于 4096。

默认情况下,此函数假定最大值在水平项目的右侧,垂直项目的底部。将 upsideDown 参数设置为 true 以反转此行为。

      【static】int sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown = false)

将像素位置 position 转换为逻辑值。0 映射到 min 参数,span 映射到 max 和其他值均匀分布在两者之间。

该函数可以处理整个整数范围而不会溢出。

默认情况下,此函数假定最大值在水平项目的右侧,垂直项目的底部。 将 upsideDown 参数设置为 true 以反转此行为。

19、【纯虚函数】QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr)

返回给定标准图标的图标。

20、QPalette standardPalette()

返回样式的标准调色板。

在支持系统颜色的系统上,不使用样式的标准调色板。如 Windows Vista 和 Mac 样式不使用标准调色板,而是使用本机主题引擎。使用这些样式,不应该使用 QApplication::setPalette() 设置调色板。

21、【纯虚函数】int styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr)

返回一个整数,表示由 option 描述的 widget 的指定样式提示。

22、【纯虚函数】QRect subControlRect(QStyle::ComplexControl control, const QStyleOptionComplex *option, QStyle::SubControl subControl, const QWidget *widget = nullptr)

返回包含复杂控件 control 的指定 subControl 的矩形(具有 option 指定的样式)。矩形在屏幕坐标中定义。

option 参数是指向 QStyleOptionComplex 或其子类之一的指针,并且可以使用 qstyleoption_cast() 函数转换为适当的类型。widget 可以包含该功能的附加信息。

23、【纯虚函数】QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget = nullptr)

返回 element 的子区域,返回的矩形在屏幕坐标中定义。

widget 可用于帮助确定区域。可以使用 qstyleoption_cast() 函数将 QStyleOption 对象转换为适当的类型。有关适当的选项转换:

  • SE_PushButtonContents:QStyleOptionButton
  • SE_PushButtonFocusRect:QStyleOptionButton
  • SE_PushButtonBevel:QStyleOptionButton
  • SE_CheckBoxIndicator:QStyleOptionButton
  • SE_CheckBoxContents:QStyleOptionButton
  • SE_CheckBoxFocusRect:QStyleOptionButton
  • SE_RadioButtonIndicator:QStyleOptionButton
  • SE_RadioButtonContents:QStyleOptionButton
  • SE_RadioButtonFocusRect:QStyleOptionButton
  • SE_ComboBoxFocusRect:QStyleOptionComboBox
  • SE_ProgressBarGroove:QStyleOptionProgressBar
  • SE_ProgressBarContents:QStyleOptionProgressBar
  • SE_ProgressBarLabel:QStyleOptionProgressBar

24、【static】Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment)

根据布局方向,将不带 Qt::AlignAbsolute 的 Qt::AlignLeft 或 Qt::AlignRight 的对齐方式转换为带 Qt::AlignAbsolute 的 Qt::AlignLeft 或 Qt::AlignRight。其他对齐标志保持不变。

如果未指定水平对齐方式,则该函数返回给定布局方向的默认对齐方式。

25、【static】QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QPoint &logicalPosition)

根据指定方向将逻辑位置转换为屏幕坐标并返回。执行平移时使用最小外接矩形boundingRectangle。

      【static】QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QRect &logicalRectangle)

根据指定方向将屏幕坐标转换为逻辑位置并返回。执行平移时使用最小外接矩形 boundingRectangle。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐