QStyleOption Class

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值