QStyleOption类型

本文详细介绍了QStyleOption及其子类在Qt中用于控制样式绘制的各个组件,包括其类型、枚举、成员变量和方法。重点讲解了OptionType、StyleOptionType、成员方法如initFrom(),以及如何通过实例化子类进行自定义控件的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QStyleOption 及其子类包含QStyle函数绘制图形元素所需的所有信息。

class Q_WIDGETS_EXPORT QStyleOption
{
public:
    enum OptionType {
                      SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
                      SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header,
                      SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame,
                      SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,

                      SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
                      SO_TitleBar, SO_GroupBox, SO_SizeGrip,

                      SO_CustomBase = 0xf00,
                      SO_ComplexCustomBase = 0xf000000
                    };

    enum StyleOptionType { Type = SO_Default };
    enum StyleOptionVersion { Version = 1 };

    int version;
    int type;
    QStyle::State state;
    Qt::LayoutDirection direction;
    QRect rect;
    QFontMetrics fontMetrics;
    QPalette palette;
    QObject *styleObject;

    QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
    QStyleOption(const QStyleOption &other);
    ~QStyleOption();

    void init(const QWidget *w);
    inline void initFrom(const QWidget *w) { init(w); }
    QStyleOption &operator=(const QStyleOption &other);
};
派生类

QStyleOptionButton、QStyleOptionComplex、QStyleOptionDockWidget、QStyleOptionFocusRect、QStyleOptionFrame、QStyleOptionGraphicsItem、QStyleOptionHeader、QStyleOptionMenuItem、QStyleOptionProgressBar、QStyleOptionRubberBand、QStyleOptionTab、QStyleOptionTabBarBase、QStyleOptionTabWidgetFrame、QStyleOptionToolBar、QStyleOptionToolBox和QStyleOptionViewItem

枚举 QStyleOption:: OptionType

此枚举由QStyleOption、其子类和qstyleoption_cast () 内部使用,以确定样式选项的类型。一般来说,除非您想创建自己的QStyleOption子类和自己的样式,否则您无需担心这一点。

ConstantValueDescription
QStyleOption::SO_ButtonQStyleOptionButton
QStyleOption::SO_ComboBoxQStyleOptionComboBox
QStyleOption::SO_ComplexQStyleOptionComplex
QStyleOption::SO_DefaultQStyleOption
QStyleOption::SO_DockWidgetQStyleOptionDockWidget
QStyleOption::SO_FocusRectQStyleOptionFocusRect
QStyleOption::SO_GraphicsItemQStyleOptionGraphicsItem
QStyleOption::SO_GroupBoxQStyleOptionGroupBox
QStyleOption::SO_HeaderQStyleOptionHeader
QStyleOption::SO_MenuItemQStyleOptionMenuItem
QStyleOption::SO_ProgressBarQStyleOptionProgressBar
QStyleOption::SO_RubberBandQStyleOptionRubberBand
QStyleOption::SO_SizeGripQStyleOptionSizeGrip
QStyleOption::SO_SliderQStyleOptionSlider
QStyleOption::SO_SpinBoxQStyleOptionSpinBox
QStyleOption::SO_TabQStyleOptionTab
QStyleOption::SO_TabBarBaseQStyleOptionTabBarBase
QStyleOption::SO_TabWidgetFrameQStyleOptionTabWidgetFrame
QStyleOption::SO_TitleBarQStyleOptionTitleBar
QStyleOption::SO_ToolBarQStyleOptionToolBar
QStyleOption::SO_ToolBoxQStyleOptionToolBox
QStyleOption::SO_ToolButtonQStyleOptionToolButton
QStyleOption::SO_ViewItemQStyleOptionViewItem (used in Interviews)
以下值用于自定义控件:
ConstantValueDescription
QStyleOption::SO_CustomBase0xf00为自定义 QStyleOptions 保留,所有自定义控件值必须高于此值
QStyleOption::SO_ComplexCustomBase0xf000000为自定义 QStyleOptions 保留;所有自定义复杂控件值必须高于此值
枚举 QStyleOption:: StyleOptionType

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

ConstantValueDescription
QStyleOption::TypeSO_DefaultSO_Default 提供的样式选项类型(此类的SO_Default)

该类型由QStyleOption内部使用,它的子类和qstyleoption_cast () 来确定样式选项的类型。一般来说,除非您想创建自己的QStyleOption子类和自己的样式,否则您无需担心这一点。

成员方法
void QStyleOption:: initFrom (const QWidget * widget )

根据指定的小部件初始化state、direction、rect、palette、fontMetrics和styleObject成员变量。
这是一个便利功能;成员变量也可以手动初始化。
另见QWidget::layoutDirection ()、QWidget::rect ()、QWidget::palette () 和QWidget::fontMetrics ()。

成员变量文档
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。

示例:

出于性能原因,成员函数很少,并且对成员变量的访问是直接的(即,使用.or->运算符)。这种低层次的感觉使结构易于使用,并强调这些只是样式函数使用的参数。

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);
}

QStyleOption官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值