前言
QStyle类的内容非常庞大,本文旨在对各部分一句话概括,方便建立整体认知。
更详细全面的内容另请参见 QStyle文档。
一、QStyle成员
1. Public类型
enum ComplexControl { CC_SpinBox, CC_ComboBox, CC_ScrollBar, CC_Slider, CC_ToolButton, …, CC_CustomBase }
enum ContentsType { CT_CheckBox, CT_ComboBox, CT_HeaderSection, CT_LineEdit, CT_Menu, …, CT_MdiControls }
enum ControlElement { CE_PushButton, CE_PushButtonBevel, CE_PushButtonLabel, CE_DockWidgetTitle, CE_Splitter, …, CE_ShapedFrame }
enum PixelMetric { PM_ButtonMargin, PM_DockWidgetTitleBarButtonMargin, PM_ButtonDefaultIndicator, PM_MenuButtonIndicator, PM_ButtonShiftHorizontal, …, PM_DefaultLayoutSpacing }
enum PrimitiveElement { PE_FrameStatusBar, PE_PanelButtonCommand, PE_FrameDefaultButton, PE_PanelButtonBevel, PE_PanelButtonTool, …, PE_PanelMenu }
enum RequestSoftwareInputPanel { RSIP_OnMouseClickAndAlreadyFocused, RSIP_OnMouseClick }
enum StandardPixmap { SP_TitleBarMinButton, SP_TitleBarMenuButton, SP_TitleBarMaxButton, SP_TitleBarCloseButton, SP_TitleBarNormalButton, …, SP_CustomBase }
flags State // typedef QFlags<StateFlag> State;
enum StateFlag { State_None, State_Active, State_AutoRaise, State_Children, State_DownArrow, …, State_Small }
enum StyleHint { SH_EtchDisabledText, SH_DitherDisabledText, SH_ScrollBar_ContextMenu, SH_ScrollBar_MiddleClickAbsolutePosition, SH_ScrollBar_LeftClickAbsolutePosition, …, SH_SpinBox_StepModifier }
enum SubControl { SC_None, SC_ScrollBarAddLine, SC_ScrollBarSubLine, SC_ScrollBarAddPage, SC_ScrollBarSubPage, …, SC_All }
flags SubControls
enum SubElement { SE_PushButtonContents, SE_PushButtonFocusRect, SE_PushButtonLayoutItem, SE_PushButtonBevel, SE_CheckBoxIndicator, …, SE_ToolBarHandle }
其中大部分是枚举类型,有两个例外:
State
是QFlags<StateFlag>
的别名。State
存储了StateFlag
枚举量的或运算(OR)集合。SubControls
是QFlags<SubControl>
的别名,存储了SubControl
的或运算(OR)集合。
枚举类型 | 值示例 | 作用 |
---|---|---|
enum ConplexControl | CC_SpinBox | 描述了可用的复杂控件。 复杂控件会因用户点击的位置或按下的键而表现不同行为 |
enum ContentsType | CT_CheckBox | 描述了可用的内容类型。 这些内容类型用于计算各种小部件的内容大小 |
enum ControlElement | CE_PushButton | 表示一个控件元素。 控件元素是小部件的一部分,用于执行某些操作或向用户显示信息。 |
enum PixelMetric | PM_ButtonMargin | 描述了各种可用的像素度量。 像素度量是一种与样式相关的尺寸,由单个像素值表示。 |
enum PrimitiveElement | PE_FrameStatusBar | 描述了原始(基本)元素。 原始元素是常见的GUI元素,例如复选框指示器或按钮斜角。 |
enum RequestSoftwareInputPanel | RSIP_OnMouseClick | 描述了在什么情况下具有输入功能的小部件会请求软件输入面板。 |
enum StandardPixmap | SP_TitleBarMinButton | 描述了可用的标准像素图。 标准像素图是可以遵循某些现有GUI样式或指南的像素图。 |
flags State | —————————— | enum StateFlag标志位的集合。 |
enum StateFlag | State_Active | 描述了绘制原始元素(Primitive Elements)时使用的flags。 注意,并不是所有原始元素都会使用所有这些标志,并且这些标志对不同的项目可能有不同的含义。 |
enum StyleHint | SH_ScrollBar_ContextMenu | 描述了可用的样式提示。 样式提示是一种整体外观的提示。 |
flags SubControls | —————————— | enum SubControl的标志位集合。 |
enum SubControl | SC_ScrollBarAddLine | 描述了可用的子控件枚举类型。 子控件是复合控件( enum QStyle::ComplexControl )中的控件元素。 |
enum SubElement | SE_PushButtonContents | 表示了一个小部件的子区域。 样式实现使用这些区域来绘制小部件的不同部分。 |
2. Public函数
QStyle()
virtual ~QStyle()
int combinedLayoutSpacing(QSizePolicy::ControlTypes controls1, QSizePolicy::ControlTypes controls2, Qt::Orientation orientation, QStyleOption *option = nullptr, QWidget *widget = nullptr) const
virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const = 0
virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const = 0
virtual void drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const
virtual void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const
virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const = 0
virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const = 0
virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget = nullptr) const = 0
virtual QRect itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const
virtual QRect itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const
virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const = 0
virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const = 0
virtual void polish(QWidget *widget)
virtual void polish(QApplication *application)
virtual void polish(QPalette &palette)
const QStyle * proxy() const
virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget = nullptr) const = 0
virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0
virtual QPalette standardPalette() const
virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const = 0
virtual QRect subControlRect(QStyle::ComplexControl control, const QStyleOptionComplex *option, QStyle::SubControl subControl, const QWidget *widget = nullptr) const = 0
virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget = nullptr) const = 0
virtual void unpolish(QWidget *widget)
virtual void unpolish(QApplication *application)
函数名 | 作用 |
---|---|
combinedLayoutSpacing | 返回在布局中应该用于 controls1 和 controls2 之间的间距。 |
drawComplexControl | 使用所提供的painter和指定的option样式选项绘制给定的控件。 |
drawControl | 使用所提供的painter和指定的option样式选项绘制给定的元素。 |
drawItemPixmap | 使用所提供的painter,根据指定的alignment,在指定的rectangle中绘制给定的pixmap。 |
drawItemText | 在指定的矩形内使用提供的painter和调色板(palette)绘制给定的文本。 |
drawPrimitive | 使用提供的painter和指定的样式选项(option)绘制给定的基本元素(primitive element) |
generatedIconPixmap | 返回给定图像(pixmap)的副本,该副本经过样式化以符合指定的图标模式(iconMode),并考虑由option指定的调色板(palette)。 |
hitTestComplexControl | 返回给定复杂控件(complex control)中指定位置(position)的子控件,使用由option指定的样式选项。 |
itemPixmapRect | 返回在给定矩形内根据定义的对齐方式绘制指定图像(pixmap)的矩形区域。 |
itemTextRect | 返回在给定矩形内根据指定的字体度量(font metrics)和对齐方式绘制提供的文本(text)的区域。 |
layoutSpacing | 返回在布局中控制项control1和control2之间应使用的间距。 |
pixelMetric | 返回给定像素度量(pixel metric)的值。 |
polish | 初始化给定窗口部件(widget)的外观。 |
proxy | 返回该样式的当前代理 |
sizeFromContents | 返回由指定的option和type描述的元素的大小,基于提供的contentsSize。 |
standardIcon | 返回给定标准图标(standardIcon)的图标。 |
standardPalette | 返回样式的标准调色板。 |
styleHint | 返回一个整数,表示由提供的样式选项描述的给定窗口部件的指定样式提示(style hint)。 |
subControlRect | 返回包含给定复杂控件(complex control)的指定子控件(subControl)的矩形(使用由option指定的样式)。 |
subElementRect | 返回给定元素(element)的子区域,如提供的样式选项(style option)中所描述。 |
unpolish | 取消初始化给定窗口部件/程序的外观。 |
3. 静态成员函数
QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle)
int sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown = false)
int sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown = false)
Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment)
QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QPoint &logicalPosition)
QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QRect &logicalRectangle)
函数名 | 作用 |
---|---|
alignedRect | 返回一个指定大小的矩形,大小由size指定。 该矩形会根据指定的对齐方式alignment和方向direction与给定的矩形rectangle对齐。 |
sliderPositionFromValue | 将给定的逻辑值(logicalValue)转换为像素位置。 min参数映射到0,max参数映射到span,其他值在两者之间均匀分布。 此函数可以处理整个整数范围而不会溢出,前提是span小于4096。 默认情况下,此函数假定最大值位于水平项的右侧和垂直项的底部。将upsideDown参数设置为true以反转此行为。 |
sliderValueFromPosition | 将给定的像素位置转换为逻辑值。 0 映射到 min 参数,span 映射到 max,其他值则在两者之间均匀分布。 此函数可以处理整个整数范围而不会发生溢出。 默认情况下,此函数假设最大值位于水平项目的右侧和垂直项目的底部。将 upsideDown 参数设置为 true 可逆转此行为。 |
visualAlignment | 根据布局方向,将不带Qt::AlignAbsolute的Qt::AlignLeft或Qt::AlignRight对齐方式转换为带Qt::AlignAbsolute的Qt::AlignLeft或Qt::AlignRight对齐方式。 其他对齐标志将保持不变。如果未指定水平对齐方式,该函数将返回给定布局方向的默认对齐方式。 |
visualPos | 根据指定方向(direction),返回将给定的逻辑位置(logicalPosition)转换为屏幕坐标后的结果。 转换时使用boundingRectangle。 |
visualRect | 根据指定方向(direction),返回将给定的逻辑矩形(logicalRectangle)转换为屏幕坐标后的结果。 转换时使用boundingRectangle。 提供此函数是为了支持从右到左的桌面,通常在实现 subControlRect() 函数时使用。 |