QStyleOption 类

QStyleOption 类存储了由 QStyle 函数使用的参数。 更多...

公开类型

枚举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()
voidinitFrom(const QWidget *widget)
QStyleOption &operator=(const QStyleOption &other)

公开变量

Qt::LayoutDirectiondirection
QFontMetricsfontMetrics
QPalettepalette
QRectrect
QStyle::Statestate
QObject *styleObject
inttype
intversion
Tqstyleoption_cast(const QStyleOption *option)
Tqstyleoption_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。

另请参阅 QStyleQStylePainter

成员类型文档

enum QStyleOption::OptionType

此枚举由QStyleOption、其子类和qstyleoption_cast()内部使用以确定样式选项的类型。通常您无需担心此内容,除非您想创建自己的QStyleOption子类和自己的样式。

常量描述
QStyleOption::SO_Button2QStyleOptionButton
QStyleOption::SO_ComboBox0xf0004QStyleOptionComboBox
QStyleOption::SO_Complex0xf0000QStyleOptionComplex
QStyleOption::SO_Default0QStyleOption
QStyleOption::SO_DockWidget9QStyleOptionDockWidget
QStyleOption::SO_FocusRect1QStyleOptionFocusRect
QStyleOption::SO_Frame5QStyleOptionFrame
QStyleOption::SO_GraphicsItem15QStyleOptionGraphicsItem
QStyleOption::SO_GroupBox0xf0006QStyleOptionGroupBox
QStyleOption::SO_Header8QStyleOptionHeader
QStyleOption::SO_MenuItem4QStyleOptionMenuItem
QStyleOption::SO_ProgressBar6QStyleOptionProgressBar
QStyleOption::SO_RubberBand13QStyleOptionRubberBand
QStyleOption::SO_SizeGrip0xf0007QStyleOptionSizeGrip
QStyleOption::SO_Slider0xf0001QStyleOptionSlider
QStyleOption::SO_SpinBox0xf0002QStyleOptionSpinBox
QStyleOption::SO_Tab3QStyleOptionTab
QStyleOption::SO_TabBarBase12QStyleOptionTabBarBase
QStyleOption::SO_TabWidgetFrame11QStyleOptionTabWidgetFrame
QStyleOption::SO_TitleBar0xf0005QStyleOptionTitleBar
QStyleOption::SO_ToolBar14QStyleOptionToolBar
QStyleOption::SO_ToolBox7QStyleOptionToolBox
QStyleOption::SO_ToolButton0xf0003QStyleOptionToolButton
QStyleOption::SO_ViewItem10QStyleOptionViewItem(用于Interviews)

以下值用于自定义控件

常量描述
QStyleOption::SO_CustomBase0xf00保留用于自定义QStyleOption;所有自定义控件值必须高于此值
QStyleOption::SO_ComplexCustomBase0xf000000保留用于自定义QStyleOption;所有自定义复杂控件值必须高于此值

另请参阅 type

enum QStyleOption::StyleOptionType

此枚举用于保存有关样式选项类型的有关信息,并为每个QStyleOption子类定义。

常量描述
QStyleOption::TypeSO_Default提供的样式选项类型(《a href="qstyleoption.html#OptionType-enum" translate="no">SO DefaultValue对该类)。

该类型是在 QStyleOption 内部使用的,包括其子类以及 qstyleoption_cast(),用于确定样式选项的类型。一般而言,除非您想创建自己的 QStyleOption 子类和样式,否则不需要担心这个细节。

另请参阅StyleOptionVersion

枚举 QStyleOption::StyleOptionVersion

此枚举用于保存有关样式选项版本的信息,并且为每个 QStyleOption 子类定义。

常量描述
QStyleOption::Version11

版本由 QStyleOption 子类用于在不破坏兼容性的情况下实现扩展。如果您使用 qstyleoption_cast(),通常不需要检查它。

另请参阅StyleOptionType

成员函数文档

QStyleOption::QStyleOption(int version = QStyleOption::Version, int type = SO_Default)

使用指定的 versiontype 构造 QStyleOption。

对于 QStyleOption,版本没有特殊意义;子类可以使用它来区分同一选项类型的不同版本。

QStyle::State_None

另请参阅versiontype

QStyleOption::QStyleOption(const QStyleOption &other)

构造 other 的副本。

[noexcept] QStyleOption::~QStyleOption()

销毁此样式选项对象。

void QStyleOption::initFrom(const QWidget *widget)

根据指定的 widget 初始化 statedirectionrectpalettefontMetricsstyleObject 成员变量。

这是一个便利函数;成员变量也可以手动初始化。

另请参阅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

该变量存储了正在被样式的对象

内置样式支持以下类型: QWidgetQGraphicsObjectQQuickItem

另请参阅initFrom()。

int QStyleOption::type

该变量存储样式选项的选项类型

默认值是 SO_Default

另请参阅OptionType

int QStyleOption::version

该变量存储样式选项的版本

此值可以被子类用于扩展实现而不破坏兼容性。如果您使用qstyleoption_cast()函数,通常不需要检查它。

默认值为1。

相关非成员函数

template <typename T> T qstyleoption_cast(const QStyleOption *option)

根据给定optiontypeversion返回一个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::typeQStyleOption::version

template <typename T> T qstyleoption_cast(QStyleOption *option)

这是一个重载函数。

根据给定选项的类型,返回 T 或 nullptr

© 2024 Qt 公司有限公司。此处包含的文档贡献归各自所有者所有。提供的文档受 GNU 自由文档许可证版本 1.3 的条款约束,由自由软件基金会发布。Qt 及相关标志是芬兰及其它国家/地区的 Qt 公司的商标。所有其他商标均为各自所有者的财产。