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、其子类和qstyleoption_cast () 内部使用,以确定样式选项的类型。一般来说,除非您想创建自己的QStyleOption子类和自己的样式,否则您无需担心这一点。
Constant | Value | Description |
---|---|---|
QStyleOption::SO_Button | QStyleOptionButton | |
QStyleOption::SO_ComboBox | QStyleOptionComboBox | |
QStyleOption::SO_Complex | QStyleOptionComplex | |
QStyleOption::SO_Default | QStyleOption | |
QStyleOption::SO_DockWidget | QStyleOptionDockWidget | |
QStyleOption::SO_FocusRect | QStyleOptionFocusRect | |
QStyleOption::SO_GraphicsItem | QStyleOptionGraphicsItem | |
QStyleOption::SO_GroupBox | QStyleOptionGroupBox | |
QStyleOption::SO_Header | QStyleOptionHeader | |
QStyleOption::SO_MenuItem | QStyleOptionMenuItem | |
QStyleOption::SO_ProgressBar | QStyleOptionProgressBar | |
QStyleOption::SO_RubberBand | QStyleOptionRubberBand | |
QStyleOption::SO_SizeGrip | QStyleOptionSizeGrip | |
QStyleOption::SO_Slider | QStyleOptionSlider | |
QStyleOption::SO_SpinBox | QStyleOptionSpinBox | |
QStyleOption::SO_Tab | QStyleOptionTab | |
QStyleOption::SO_TabBarBase | QStyleOptionTabBarBase | |
QStyleOption::SO_TabWidgetFrame | QStyleOptionTabWidgetFrame | |
QStyleOption::SO_TitleBar | QStyleOptionTitleBar | |
QStyleOption::SO_ToolBar | QStyleOptionToolBar | |
QStyleOption::SO_ToolBox | QStyleOptionToolBox | |
QStyleOption::SO_ToolButton | QStyleOptionToolButton | |
QStyleOption::SO_ViewItem | QStyleOptionViewItem (used in Interviews) |
Constant | Value | Description |
---|---|---|
QStyleOption::SO_CustomBase | 0xf00 | 为自定义 QStyleOptions 保留,所有自定义控件值必须高于此值 |
QStyleOption::SO_ComplexCustomBase | 0xf000000 | 为自定义 QStyleOptions 保留;所有自定义复杂控件值必须高于此值 |
此枚举用于保存有关样式选项类型的信息,并为每个QStyleOption子类定义。
Constant | Value | Description |
---|---|---|
QStyleOption::Type | SO_Default | SO_Default 提供的样式选项类型(此类的SO_Default) |
该类型由QStyleOption内部使用,它的子类和qstyleoption_cast () 来确定样式选项的类型。一般来说,除非您想创建自己的QStyleOption子类和自己的样式,否则您无需担心这一点。
根据指定的小部件初始化state、direction、rect、palette、fontMetrics和styleObject成员变量。
这是一个便利功能;成员变量也可以手动初始化。
另见QWidget::layoutDirection ()、QWidget::rect ()、QWidget::palette () 和QWidget::fontMetrics ()。
此变量保存在控件中绘制文本时应使用的文本布局方向
默认情况下,布局方向是Qt::LeftToRight。
另请参见initFrom ()。
此变量保存在控件中绘制文本时应使用的字体规格
默认情况下,使用应用程序的默认字体。
另请参见initFrom ()。
此变量保存绘制控件时应使用的调色板
默认情况下,使用应用程序的默认调色板。
另请参见initFrom ()。
该变量保存应该用于各种计算和绘画的区域
对于不同类型的元素,这可能具有不同的含义。例如,对于QStyle::CE_PushButton元素,它将是整个按钮的矩形,而对于QStyle::CE_PushButtonLabel元素,它将只是按钮标签的区域。
默认值为空矩形,即宽度和高度都设置为 0 的矩形。
另请参见initFrom ()。
此变量保存绘制控件时使用的样式标志
默认值为QStyle::State_None。
另请参见initFrom ()、QStyle::drawPrimitive ()、QStyle::drawControl ()、QStyle::drawComplexControl () 和QStyle::State。
此变量保存正在设置样式的对象
内置样式支持以下类型:QWidget、QGraphicsObject和QQuickItem。
另请参见initFrom ()。
此变量保存样式选项的选项类型
默认值为SO_Default。
另请参阅OptionType。
此变量保存样式选项的版本
子类可以使用此值来实现扩展而不会破坏兼容性。如果使用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);
}