QStyleOption 类
QStyleOption 类存储了由 QStyle 函数使用的参数。 更多...
头文件 | #include <QStyleOption> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承自 | 16 个类型QStyleOptionButton, QStyleOptionComplex, QStyleOptionDockWidget, QStyleOptionFocusRect, QStyleOptionFrame, QStyleOptionGraphicsItem, QStyleOptionHeader, QStyleOptionMenuItem, QStyleOptionProgressBar, QStyleOptionRubberBand, QStyleOptionTab, QStyleOptionTabBarBase, QStyleOptionTabWidgetFrame, QStyleOptionToolBar, QStyleOptionToolBox 以及 QStyleOptionViewItem |
公开类型
枚举 | OptionType { SO_Button, SO_ComboBox, SO_Complex, SO_Default, SO_DockWidget, …, SO_ComplexCustomBase } |
枚举 | StyleOptionType { Type } |
枚举 | StyleOptionVersion { Version } |
公开函数
QStyleOption(int version = QStyleOption::Version, int type = SO_Default) | |
QStyleOption(const QStyleOption &other) | |
~QStyleOption() | |
void | initFrom(const QWidget *widget) |
QStyleOption & | operator=(const QStyleOption &other) |
公开变量
Qt::LayoutDirection | direction |
QFontMetrics | fontMetrics |
QPalette | palette |
QRect | rect |
QStyle::State | state |
QObject * | styleObject |
int | type |
int | version |
相关非成员
T | qstyleoption_cast(const QStyleOption *option) |
T | qstyleoption_cast(QStyleOption *option) |
详细描述
QStyleOption 及其子类包含了 QStyle 函数绘制图形元素所需的所有信息。
出于性能原因,成员函数很少,且成员变量的访问是直接的(即,使用 .
或 ->
操作符)。这使得结构简洁易用,并强调这些只是由样式函数使用的参数。
QStyle函数的调用者通常在栈上创建QStyleOption对象。这与Qt对如QString、QPalette和QColor等类型的广泛使用隐式共享相结合,确保不会无谓地进行内存分配。
以下代码片段展示了如何使用特定的QStyleOption子类来绘制一个按钮
void MyPushButton::paintEvent(QPaintEvent *) { QStyleOptionButton option; option.initFrom(this); option.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised; if (isDefault()) option.features |= QStyleOptionButton::DefaultButton; option.text = text(); option.icon = icon(); QPainter painter(this); style()->drawControl(QStyle::CE_PushButton, &option, &painter, this); }
在我们的例子中,控件是QStyle::CE_PushButton,根据QStyle::drawControl()文档,相应的类是QStyleOptionButton。
当重新实现接受QStyleOption参数的QStyle函数时,您通常需要将QStyleOption转换为子类。为了安全起见,您可以使用qstyleoption_cast()来确保正确的指针类型。例如
void MyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) { if (element == PE_FrameFocusRect) { const QStyleOptionFocusRect *focusRectOption = qstyleoption_cast<const QStyleOptionFocusRect *>(option); if (focusRectOption) { // ... } } // ... }
qstyleoption_cast()函数如果option
指向的对象不是正确的类型,将返回0。
另请参阅 QStyle和QStylePainter。
成员类型文档
enum QStyleOption::OptionType
此枚举由QStyleOption、其子类和qstyleoption_cast()内部使用以确定样式选项的类型。通常您无需担心此内容,除非您想创建自己的QStyleOption子类和自己的样式。
常量 | 值 | 描述 |
---|---|---|
QStyleOption::SO_Button | 2 | QStyleOptionButton |
QStyleOption::SO_ComboBox | 0xf0004 | QStyleOptionComboBox |
QStyleOption::SO_Complex | 0xf0000 | QStyleOptionComplex |
QStyleOption::SO_Default | 0 | QStyleOption |
QStyleOption::SO_DockWidget | 9 | QStyleOptionDockWidget |
QStyleOption::SO_FocusRect | 1 | QStyleOptionFocusRect |
QStyleOption::SO_Frame | 5 | QStyleOptionFrame |
QStyleOption::SO_GraphicsItem | 15 | QStyleOptionGraphicsItem |
QStyleOption::SO_GroupBox | 0xf0006 | QStyleOptionGroupBox |
QStyleOption::SO_Header | 8 | QStyleOptionHeader |
QStyleOption::SO_MenuItem | 4 | QStyleOptionMenuItem |
QStyleOption::SO_ProgressBar | 6 | QStyleOptionProgressBar |
QStyleOption::SO_RubberBand | 13 | QStyleOptionRubberBand |
QStyleOption::SO_SizeGrip | 0xf0007 | QStyleOptionSizeGrip |
QStyleOption::SO_Slider | 0xf0001 | QStyleOptionSlider |
QStyleOption::SO_SpinBox | 0xf0002 | QStyleOptionSpinBox |
QStyleOption::SO_Tab | 3 | QStyleOptionTab |
QStyleOption::SO_TabBarBase | 12 | QStyleOptionTabBarBase |
QStyleOption::SO_TabWidgetFrame | 11 | QStyleOptionTabWidgetFrame |
QStyleOption::SO_TitleBar | 0xf0005 | QStyleOptionTitleBar |
QStyleOption::SO_ToolBar | 14 | QStyleOptionToolBar |
QStyleOption::SO_ToolBox | 7 | QStyleOptionToolBox |
QStyleOption::SO_ToolButton | 0xf0003 | QStyleOptionToolButton |
QStyleOption::SO_ViewItem | 10 | QStyleOptionViewItem(用于Interviews) |
以下值用于自定义控件
常量 | 值 | 描述 |
---|---|---|
QStyleOption::SO_CustomBase | 0xf00 | 保留用于自定义QStyleOption;所有自定义控件值必须高于此值 |
QStyleOption::SO_ComplexCustomBase | 0xf000000 | 保留用于自定义QStyleOption;所有自定义复杂控件值必须高于此值 |
另请参阅 type。
enum QStyleOption::StyleOptionType
此枚举用于保存有关样式选项类型的有关信息,并为每个QStyleOption子类定义。
常量 | 值 | 描述 |
---|---|---|
QStyleOption::Type | SO_Default | 提供的样式选项类型(《a href="qstyleoption.html#OptionType-enum" translate="no">SO DefaultValue对该类)。 |
该类型是在 QStyleOption 内部使用的,包括其子类以及 qstyleoption_cast(),用于确定样式选项的类型。一般而言,除非您想创建自己的 QStyleOption 子类和样式,否则不需要担心这个细节。
另请参阅StyleOptionVersion。
枚举 QStyleOption::StyleOptionVersion
此枚举用于保存有关样式选项版本的信息,并且为每个 QStyleOption 子类定义。
常量 | 值 | 描述 |
---|---|---|
QStyleOption::Version | 1 | 1 |
版本由 QStyleOption 子类用于在不破坏兼容性的情况下实现扩展。如果您使用 qstyleoption_cast(),通常不需要检查它。
另请参阅StyleOptionType。
成员函数文档
QStyleOption::QStyleOption(int version = QStyleOption::Version, int type = SO_Default)
使用指定的 version 和 type 构造 QStyleOption。
对于 QStyleOption,版本没有特殊意义;子类可以使用它来区分同一选项类型的不同版本。
QStyleOption::QStyleOption(const QStyleOption &other)
构造 other 的副本。
[noexcept]
QStyleOption::~QStyleOption()
销毁此样式选项对象。
void QStyleOption::initFrom(const QWidget *widget)
根据指定的 widget 初始化 state,direction,rect,palette,fontMetrics 和 styleObject 成员变量。
这是一个便利函数;成员变量也可以手动初始化。
另请参阅QWidget::layoutDirection(),QWidget::rect(),QWidget::palette() 和 QWidget::fontMetrics。
QStyleOption &QStyleOption::operator=(const QStyleOption &other)
将 other 赋值给此 QStyleOption。
成员变量文档
Qt::LayoutDirection QStyleOption::direction
此变量保存了在控件中绘制文本时应使用的文本布局方向。
默认情况下,布局方向为 Qt::LeftToRight。
另请参阅initFrom()。
QFontMetrics QStyleOption::fontMetrics
该变量存储了在控件中绘制文字时应使用的字体度量信息
默认情况下,使用应用程序的默认字体。
另请参阅initFrom()。
QPalette QStyleOption::palette
该变量存储了在绘制控件时应使用的调色板
默认情况下,使用应用程序的默认调色板。
另请参阅initFrom()。
QRect QStyleOption::rect
该变量存储了用于各种计算和绘制的区域
对于不同类型的元素,这可能具有不同的含义。例如,对于一个 QStyle::CE_PushButton 元素,这将是被整个按钮的矩形,而对于一个 QStyle::CE_PushButtonLabel 元素,这将只被按钮标签的区域。
默认值为空矩形,即宽度和高度都设置为0的矩形。
另请参阅initFrom()。
QStyle::State QStyleOption::state
该变量存储了在绘制控件时使用的样式标志
默认值是 QStyle::State_None。
另请参阅initFrom(),QStyle::drawPrimitive(),QStyle::drawControl(),QStyle::drawComplexControl()和QStyle::State。
QObject *QStyleOption::styleObject
该变量存储了正在被样式的对象
内置样式支持以下类型: QWidget,QGraphicsObject和QQuickItem。
另请参阅initFrom()。
int QStyleOption::type
该变量存储样式选项的选项类型
默认值是 SO_Default。
另请参阅OptionType。
int QStyleOption::version
该变量存储样式选项的版本
此值可以被子类用于扩展实现而不破坏兼容性。如果您使用qstyleoption_cast()函数,通常不需要检查它。
默认值为1。
相关非成员函数
template <typename T> T qstyleoption_cast(const QStyleOption *option)
根据给定option的type和version返回一个T或nullptr
。
示例
void MyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) { if (element == PE_FrameFocusRect) { const QStyleOptionFocusRect *focusRectOption = qstyleoption_cast<const QStyleOptionFocusRect *>(option); if (focusRectOption) { // ... } } // ... }
另请参阅QStyleOption::type和QStyleOption::version。
template <typename T> T qstyleoption_cast(QStyleOption *option)
这是一个重载函数。
根据给定选项的类型,返回 T 或 nullptr
。
© 2024 Qt 公司有限公司。此处包含的文档贡献归各自所有者所有。提供的文档受 GNU 自由文档许可证版本 1.3 的条款约束,由自由软件基金会发布。Qt 及相关标志是芬兰及其它国家/地区的 Qt 公司的商标。所有其他商标均为各自所有者的财产。