Header:#include < QStyleOption >
qmake:QT += widgets
Inherited By:QStyleOptionButton, QStyleOptionComplex, QStyleOptionDockWidget, QStyleOptionFocusRect, QStyleOptionFrame, QStyleOptionGraphicsItem, QStyleOptionHeader, QStyleOptionMenuItem, QStyleOptionProgressBar, QStyleOptionRubberBand, QStyleOptionTab, QStyleOptionTabBarBase, QStyleOptionTabWidgetFrame, QStyleOptionToolBar, QStyleOptionToolBox, and QStyleOptionViewItem
Public Types
enum OptionType { SO_Button, SO_ComboBox, SO_Complex, SO_Default, SO_DockWidget, …, SO_ComplexCustomBase }
enum StyleOptionType { Type }
enum StyleOptionVersion { Version }
Public Functions
QStyleOption(const QStyleOption &other)
QStyleOption(int version = QStyleOption::Version, int type = SO_Default)
QStyleOption &operator=(const QStyleOption &other)
~QStyleOption()
void initFrom(const QWidget *widget)
Public Variables
Qt::LayoutDirection direction
QFontMetrics fontMetrics
QPalette palette
QRect rect
QStyle::State state
QObject * styleObject
int type
int version
Related Non-Members
T qstyleoption_cast(const QStyleOption *option)
T qstyleoption_cast(QStyleOption *option)
Detailed Description
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()函数将返回0。
有关演示如何使用样式选项的示例,请参见Styles示例。
See also QStyle and QStylePainter.
Member Type Documentation
enum QStyleOption::OptionType
这个enum在QStyleOption、它的子类和qstyleoption_cast()内部使用,以确定样式选项的类型。通常你不需要担心这个,除非你想创建你自己的QStyleOption子类和你自己的样式。
Constant Value Description
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 (used in Interviews)
以下值用于自定义控件:
Constant Value Description
QStyleOption::SO_CustomBase 0xf00 为自定义QStyleOptions保留;所有自定义控件的值必须高于此值
QStyleOption::SO_ComplexCustomBase 0xf000000 为自定义QStyleOptions保留;所有自定义复杂控件的值必须高于此值
See also type.
enum QStyleOption::StyleOptionType
这个枚举用于保存关于样式选项类型的信息,并且为每个QStyleOption子类定义。
Constant Value Description
QStyleOption::Type SO_Default 提供的样式选项的类型(该类的SO_Default)。
该类型由QStyleOption及其子类和qstyleoption_cast()在内部使用,以确定样式选项的类型。通常你不需要担心这个,除非你想创建你自己的QStyleOption子类和你自己的样式。
See also StyleOptionVersion.
enum QStyleOption::StyleOptionVersion
该枚举用于保存样式选项的版本信息,并为每个QStyleOption子类定义。
Constant Value Description
QStyleOption::Version 1 1
QStyleOption子类使用该版本来实现扩展而不会破坏兼容性。如果使用qstyleoption_cast(),通常不需要检查它。
See also StyleOptionType.
Member Function Documentation
QStyleOption::QStyleOption(const QStyleOption &other)
Constructs a copy of other.
QStyleOption::QStyleOption(int version = QStyleOption::Version, int type = SO_Default)
构造具有指定版本和类型的QStyleOption。
版本对QStyleOption没有特殊含义;子类可以使用它来区分相同选项类型的不同版本。
状态成员变量初始化为QStyle::State_None。
See also version and type.
QStyleOption &QStyleOption::operator=(const QStyleOption &other)
将other赋给这个QStyleOption。
QStyleOption::~QStyleOption()
Destroys this style option object.
void QStyleOption::initFrom(const QWidget *widget)
根据指定的小部件初始化state、direction、rect、palette、fontMetrics和styleObject成员变量。
这是一个方便函数;成员变量也可以手工初始化。
这个函数是在Qt 4.1中引入的。
See also QWidget::layoutDirection(), QWidget::rect(), QWidget::palette(), and QWidget::fontMetrics().
Member Variable Documentation
Qt::LayoutDirection QStyleOption::direction
此变量保存在控件中绘制文本时应使用的文本布局方向
默认情况下,布局方向为Qt::LeftToRight。
See also initFrom().
QFontMetrics QStyleOption::fontMetrics
此变量保存在控件中绘制文本时应使用的字体指标
默认情况下,使用应用程序的默认字体。
See also initFrom().
QPalette QStyleOption::palette
该变量包含绘制控件时应该使用的调色板
默认情况下,使用应用程序的默认调色板。
See also initFrom().
QRect QStyleOption::rect
该变量包含用于各种计算和绘制的区域
对于不同类型的元素,这可能具有不同的含义。例如,对于QStyle::CE_PushButton元素,它将是整个按钮的矩形,而对于QStyle::CE_PushButtonLabel元素,它将只是按钮标签的区域。
默认值是一个空矩形,即宽度和高度都设置为0的矩形。
See also initFrom().
QStyle::State QStyleOption::state
此变量保存绘制控件时使用的样式标志
默认值为QStyle::State_None。
See also initFrom(), QStyle::drawPrimitive(), QStyle::drawControl(), QStyle::drawComplexControl(), and QStyle::State.
QObject *QStyleOption::styleObject
这个变量保存被样式化的对象
内置样式支持以下类型:QWidget、QGraphicsObject和QQuickItem。
See also initFrom().
int QStyleOption::type
该变量保存样式选项的选项类型
默认值为SO_Default。
See also OptionType.
int QStyleOption::version
该变量保存样式选项的版本
子类可以使用此值来实现扩展而不会破坏兼容性。如果使用qstyleoption_cast()函数,通常不需要检查它。
缺省值为1。
Related Non-Members
T qstyleoption_cast(const QStyleOption *option)
根据给定选项的类型和版本返回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) {
// ...
}
}
// ...
}
See also QStyleOption::type and QStyleOption::version.
T qstyleoption_cast(QStyleOption *option)
这是一个重载函数。
根据给定选项的类型返回T或nullptr。