Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-06 08:51:00

0001 // Copyright (C) 2020 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QSTYLEOPTION_H
0006 #define QSTYLEOPTION_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtCore/qlocale.h>
0010 #include <QtCore/qvariant.h>
0011 #if QT_CONFIG(spinbox)
0012 #include <QtWidgets/qabstractspinbox.h>
0013 #endif
0014 #include <QtGui/qicon.h>
0015 #include <QtGui/qtransform.h>
0016 #if QT_CONFIG(slider)
0017 #include <QtWidgets/qslider.h>
0018 #endif
0019 #include <QtWidgets/qstyle.h>
0020 #if QT_CONFIG(tabbar)
0021 #include <QtWidgets/qtabbar.h>
0022 #endif
0023 #if QT_CONFIG(tabwidget)
0024 #include <QtWidgets/qtabwidget.h>
0025 #endif
0026 #if QT_CONFIG(rubberband)
0027 #include <QtWidgets/qrubberband.h>
0028 #endif
0029 #include <QtWidgets/qframe.h>
0030 #if QT_CONFIG(itemviews)
0031 #   include <QtCore/qabstractitemmodel.h>
0032 #endif
0033 
0034 QT_BEGIN_NAMESPACE
0035 
0036 
0037 class QDebug;
0038 
0039 class Q_WIDGETS_EXPORT QStyleOption
0040 {
0041 public:
0042     enum OptionType {
0043                       SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
0044                       SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header,
0045                       SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame,
0046                       SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,
0047 
0048                       SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
0049                       SO_TitleBar, SO_GroupBox, SO_SizeGrip,
0050 
0051                       SO_CustomBase = 0xf00,
0052                       SO_ComplexCustomBase = 0xf000000
0053                     };
0054 
0055     enum StyleOptionType { Type = SO_Default };
0056     enum StyleOptionVersion { Version = 1 };
0057 
0058     int version;
0059     int type;
0060     QStyle::State state;
0061     Qt::LayoutDirection direction;
0062     QRect rect;
0063     QFontMetrics fontMetrics;
0064     QPalette palette;
0065     QObject *styleObject;
0066 
0067     QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
0068     QStyleOption(const QStyleOption &other);
0069     ~QStyleOption();
0070 
0071     void initFrom(const QWidget *w);
0072     QStyleOption &operator=(const QStyleOption &other);
0073 };
0074 
0075 class Q_WIDGETS_EXPORT QStyleOptionFocusRect : public QStyleOption
0076 {
0077 public:
0078     enum StyleOptionType { Type = SO_FocusRect };
0079     enum StyleOptionVersion { Version = 1 };
0080 
0081     QColor backgroundColor;
0082 
0083     QStyleOptionFocusRect();
0084     QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; }
0085     QStyleOptionFocusRect &operator=(const QStyleOptionFocusRect &) = default;
0086 
0087 protected:
0088     QStyleOptionFocusRect(int version);
0089 };
0090 
0091 class Q_WIDGETS_EXPORT QStyleOptionFrame : public QStyleOption
0092 {
0093 public:
0094     enum StyleOptionType { Type = SO_Frame };
0095     enum StyleOptionVersion { Version = 1 };
0096 
0097     int lineWidth;
0098     int midLineWidth;
0099     enum FrameFeature {
0100         None = 0x00,
0101         Flat = 0x01,
0102         Rounded = 0x02
0103     };
0104     Q_DECLARE_FLAGS(FrameFeatures, FrameFeature)
0105     FrameFeatures features;
0106     QFrame::Shape frameShape;
0107 
0108     QStyleOptionFrame();
0109     QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; }
0110     QStyleOptionFrame &operator=(const QStyleOptionFrame &) = default;
0111 
0112 protected:
0113     QStyleOptionFrame(int version);
0114 };
0115 
0116 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures)
0117 
0118 #if QT_CONFIG(tabwidget)
0119 class Q_WIDGETS_EXPORT QStyleOptionTabWidgetFrame : public QStyleOption
0120 {
0121 public:
0122     enum StyleOptionType { Type = SO_TabWidgetFrame };
0123     enum StyleOptionVersion { Version = 1 };
0124 
0125     int lineWidth;
0126     int midLineWidth;
0127     QTabBar::Shape shape;
0128     QSize tabBarSize;
0129     QSize rightCornerWidgetSize;
0130     QSize leftCornerWidgetSize;
0131     QRect tabBarRect;
0132     QRect selectedTabRect;
0133 
0134     QStyleOptionTabWidgetFrame();
0135     inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other)
0136         : QStyleOption(Version, Type) { *this = other; }
0137     QStyleOptionTabWidgetFrame &operator=(const QStyleOptionTabWidgetFrame &) = default;
0138 
0139 protected:
0140     QStyleOptionTabWidgetFrame(int version);
0141 };
0142 
0143 #endif // QT_CONFIG(tabwidget)
0144 
0145 
0146 #if QT_CONFIG(tabbar)
0147 class Q_WIDGETS_EXPORT QStyleOptionTabBarBase : public QStyleOption
0148 {
0149 public:
0150     enum StyleOptionType { Type = SO_TabBarBase };
0151     enum StyleOptionVersion { Version = 1 };
0152 
0153     QTabBar::Shape shape;
0154     QRect tabBarRect;
0155     QRect selectedTabRect;
0156     bool documentMode;
0157 
0158     QStyleOptionTabBarBase();
0159     QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; }
0160     QStyleOptionTabBarBase &operator=(const QStyleOptionTabBarBase &) = default;
0161 
0162 protected:
0163     QStyleOptionTabBarBase(int version);
0164 };
0165 
0166 #endif // QT_CONFIG(tabbar)
0167 
0168 class Q_WIDGETS_EXPORT QStyleOptionHeader : public QStyleOption
0169 {
0170 public:
0171     enum StyleOptionType { Type = SO_Header };
0172     enum StyleOptionVersion { Version = 1 };
0173 
0174     enum SectionPosition { Beginning, Middle, End, OnlyOneSection };
0175     enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected,
0176                             NextAndPreviousAreSelected };
0177     enum SortIndicator { None, SortUp, SortDown };
0178 
0179     int section;
0180     QString text;
0181     Qt::Alignment textAlignment;
0182     QIcon icon;
0183     Qt::Alignment iconAlignment;
0184     SectionPosition position;
0185     SelectedPosition selectedPosition;
0186     SortIndicator sortIndicator;
0187     Qt::Orientation orientation;
0188 
0189     QStyleOptionHeader();
0190     QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }
0191     QStyleOptionHeader &operator=(const QStyleOptionHeader &) = default;
0192 
0193 protected:
0194     QStyleOptionHeader(int version);
0195 };
0196 
0197 // ### Qt7: merge with QStyleOptionHeader
0198 class Q_WIDGETS_EXPORT QStyleOptionHeaderV2 : public QStyleOptionHeader
0199 {
0200 public:
0201     enum StyleOptionType { Type = SO_Header };
0202     enum StyleOptionVersion { Version = 2 };
0203 
0204     QStyleOptionHeaderV2();
0205     QStyleOptionHeaderV2(const QStyleOptionHeaderV2 &other) : QStyleOptionHeader(Version) { *this = other; }
0206     QStyleOptionHeaderV2 &operator=(const QStyleOptionHeaderV2 &) = default;
0207 
0208     Qt::TextElideMode textElideMode:2;
0209     bool isSectionDragTarget:1;
0210     int unused:29;
0211 
0212 protected:
0213     QStyleOptionHeaderV2(int version);
0214 };
0215 
0216 class Q_WIDGETS_EXPORT QStyleOptionButton : public QStyleOption
0217 {
0218 public:
0219     enum StyleOptionType { Type = SO_Button };
0220     enum StyleOptionVersion { Version = 1 };
0221 
0222     enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04,
0223                          AutoDefaultButton = 0x08, CommandLinkButton = 0x10  };
0224     Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature)
0225 
0226     ButtonFeatures features;
0227     QString text;
0228     QIcon icon;
0229     QSize iconSize;
0230 
0231     QStyleOptionButton();
0232     QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; }
0233     QStyleOptionButton &operator=(const QStyleOptionButton &) = default;
0234 
0235 protected:
0236     QStyleOptionButton(int version);
0237 };
0238 
0239 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures)
0240 
0241 #if QT_CONFIG(tabbar)
0242 class Q_WIDGETS_EXPORT QStyleOptionTab : public QStyleOption
0243 {
0244 public:
0245     enum StyleOptionType { Type = SO_Tab };
0246     enum StyleOptionVersion { Version = 1 };
0247 
0248     enum TabPosition { Beginning, Middle, End, OnlyOneTab, Moving };
0249     enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
0250     enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01,
0251                         RightCornerWidget = 0x02 };
0252     enum TabFeature { None = 0x00, HasFrame = 0x01, MinimumSizeHint = 0x02 };
0253     Q_DECLARE_FLAGS(CornerWidgets, CornerWidget)
0254     Q_DECLARE_FLAGS(TabFeatures, TabFeature)
0255 
0256     QTabBar::Shape shape;
0257     QString text;
0258     QIcon icon;
0259     int row;
0260     TabPosition position;
0261     SelectedPosition selectedPosition;
0262     CornerWidgets cornerWidgets;
0263     QSize iconSize;
0264     bool documentMode;
0265     QSize leftButtonSize;
0266     QSize rightButtonSize;
0267     TabFeatures features;
0268     int tabIndex = -1;
0269 
0270     QStyleOptionTab();
0271     QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; }
0272     QStyleOptionTab &operator=(const QStyleOptionTab &) = default;
0273 
0274 protected:
0275     QStyleOptionTab(int version);
0276 };
0277 
0278 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets)
0279 
0280 #endif // QT_CONFIG(tabbar)
0281 
0282 
0283 #if QT_CONFIG(toolbar)
0284 
0285 class Q_WIDGETS_EXPORT QStyleOptionToolBar : public QStyleOption
0286 {
0287 public:
0288     enum StyleOptionType { Type = SO_ToolBar };
0289     enum StyleOptionVersion { Version = 1 };
0290     enum ToolBarPosition { Beginning, Middle, End, OnlyOne };
0291     enum ToolBarFeature { None = 0x0, Movable = 0x1 };
0292     Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature)
0293     ToolBarPosition positionOfLine; // The toolbar line position
0294     ToolBarPosition positionWithinLine; // The position within a toolbar
0295     Qt::ToolBarArea toolBarArea; // The toolbar docking area
0296     ToolBarFeatures features;
0297     int lineWidth;
0298     int midLineWidth;
0299     QStyleOptionToolBar();
0300     QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; }
0301     QStyleOptionToolBar &operator=(const QStyleOptionToolBar &) = default;
0302 
0303 protected:
0304     QStyleOptionToolBar(int version);
0305 };
0306 
0307 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures)
0308 
0309 #endif // QT_CONFIG(toolbar)
0310 
0311 class Q_WIDGETS_EXPORT QStyleOptionProgressBar : public QStyleOption
0312 {
0313 public:
0314     enum StyleOptionType { Type = SO_ProgressBar };
0315     enum StyleOptionVersion { Version = 1 };
0316 
0317     int minimum;
0318     int maximum;
0319     int progress;
0320     QString text;
0321     Qt::Alignment textAlignment;
0322     bool textVisible;
0323     bool invertedAppearance;
0324     bool bottomToTop;
0325 
0326     QStyleOptionProgressBar();
0327     QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; }
0328     QStyleOptionProgressBar &operator=(const QStyleOptionProgressBar &) = default;
0329 
0330 protected:
0331     QStyleOptionProgressBar(int version);
0332 };
0333 
0334 class Q_WIDGETS_EXPORT QStyleOptionMenuItem : public QStyleOption
0335 {
0336 public:
0337     enum StyleOptionType { Type = SO_MenuItem };
0338     enum StyleOptionVersion { Version = 1 };
0339 
0340     enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin,
0341                         EmptyArea };
0342     enum CheckType { NotCheckable, Exclusive, NonExclusive };
0343 
0344     MenuItemType menuItemType;
0345     CheckType checkType;
0346     bool checked;
0347     bool menuHasCheckableItems;
0348     QRect menuRect;
0349     QString text;
0350     QIcon icon;
0351     int maxIconWidth;
0352     int reservedShortcutWidth;
0353     QFont font;
0354 
0355     QStyleOptionMenuItem();
0356     QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
0357     QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default;
0358 
0359 protected:
0360     QStyleOptionMenuItem(int version);
0361 };
0362 
0363 class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption
0364 {
0365 public:
0366     enum StyleOptionType { Type = SO_DockWidget };
0367     enum StyleOptionVersion { Version = 1 };
0368 
0369     QString title;
0370     bool closable;
0371     bool movable;
0372     bool floatable;
0373     bool verticalTitleBar;
0374 
0375     QStyleOptionDockWidget();
0376     QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
0377     QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default;
0378 
0379 protected:
0380     QStyleOptionDockWidget(int version);
0381 };
0382 
0383 #if QT_CONFIG(itemviews)
0384 
0385 class Q_WIDGETS_EXPORT QStyleOptionViewItem : public QStyleOption
0386 {
0387 public:
0388     enum StyleOptionType { Type = SO_ViewItem };
0389     enum StyleOptionVersion { Version = 1 };
0390 
0391     enum Position { Left, Right, Top, Bottom };
0392 
0393     Qt::Alignment displayAlignment;
0394     Qt::Alignment decorationAlignment;
0395     Qt::TextElideMode textElideMode;
0396     Position decorationPosition;
0397     QSize decorationSize;
0398     QFont font;
0399     bool showDecorationSelected;
0400 
0401     enum ViewItemFeature {
0402         None = 0x00,
0403         WrapText = 0x01,
0404         Alternate = 0x02,
0405         HasCheckIndicator = 0x04,
0406         HasDisplay = 0x08,
0407         HasDecoration = 0x10,
0408         IsDecoratedRootColumn = 0x20,
0409         IsDecorationForRootColumn = 0x40,
0410     };
0411     Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
0412 
0413     ViewItemFeatures features;
0414 
0415     QLocale locale;
0416     const QWidget *widget;
0417 
0418     enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
0419 
0420     QModelIndex index;
0421     Qt::CheckState checkState;
0422     QIcon icon;
0423     QString text;
0424     ViewItemPosition viewItemPosition;
0425     QBrush backgroundBrush;
0426 
0427     QStyleOptionViewItem();
0428     QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
0429     QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default;
0430 
0431 protected:
0432     QStyleOptionViewItem(int version);
0433 };
0434 
0435 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures)
0436 
0437 #endif // QT_CONFIG(itemviews)
0438 
0439 class Q_WIDGETS_EXPORT QStyleOptionToolBox : public QStyleOption
0440 {
0441 public:
0442     enum StyleOptionType { Type = SO_ToolBox };
0443     enum StyleOptionVersion { Version = 1 };
0444 
0445     QString text;
0446     QIcon icon;
0447 
0448     enum TabPosition { Beginning, Middle, End, OnlyOneTab };
0449     enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
0450 
0451     TabPosition position;
0452     SelectedPosition selectedPosition;
0453 
0454     QStyleOptionToolBox();
0455     QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
0456     QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default;
0457 
0458 protected:
0459     QStyleOptionToolBox(int version);
0460 };
0461 
0462 #if QT_CONFIG(rubberband)
0463 class Q_WIDGETS_EXPORT QStyleOptionRubberBand : public QStyleOption
0464 {
0465 public:
0466     enum StyleOptionType { Type = SO_RubberBand };
0467     enum StyleOptionVersion { Version = 1 };
0468 
0469     QRubberBand::Shape shape;
0470     bool opaque;
0471 
0472     QStyleOptionRubberBand();
0473     QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
0474     QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default;
0475 
0476 protected:
0477     QStyleOptionRubberBand(int version);
0478 };
0479 #endif // QT_CONFIG(rubberband)
0480 
0481 // -------------------------- Complex style options -------------------------------
0482 class Q_WIDGETS_EXPORT QStyleOptionComplex : public QStyleOption
0483 {
0484 public:
0485     enum StyleOptionType { Type = SO_Complex };
0486     enum StyleOptionVersion { Version = 1 };
0487 
0488     QStyle::SubControls subControls;
0489     QStyle::SubControls activeSubControls;
0490 
0491     QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
0492     QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
0493     QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default;
0494 };
0495 
0496 #if QT_CONFIG(slider)
0497 class Q_WIDGETS_EXPORT QStyleOptionSlider : public QStyleOptionComplex
0498 {
0499 public:
0500     enum StyleOptionType { Type = SO_Slider };
0501     enum StyleOptionVersion { Version = 1 };
0502 
0503     Qt::Orientation orientation;
0504     int minimum;
0505     int maximum;
0506     QSlider::TickPosition tickPosition;
0507     int tickInterval;
0508     bool upsideDown;
0509     int sliderPosition;
0510     int sliderValue;
0511     int singleStep;
0512     int pageStep;
0513     qreal notchTarget;
0514     bool dialWrapping;
0515     Qt::KeyboardModifiers keyboardModifiers;
0516 
0517     QStyleOptionSlider();
0518     QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0519     QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default;
0520 
0521 protected:
0522     QStyleOptionSlider(int version);
0523 };
0524 #endif // QT_CONFIG(slider)
0525 
0526 #if QT_CONFIG(spinbox)
0527 class Q_WIDGETS_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
0528 {
0529 public:
0530     enum StyleOptionType { Type = SO_SpinBox };
0531     enum StyleOptionVersion { Version = 1 };
0532 
0533     QAbstractSpinBox::ButtonSymbols buttonSymbols;
0534     QAbstractSpinBox::StepEnabled stepEnabled;
0535     bool frame;
0536 
0537     QStyleOptionSpinBox();
0538     QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0539     QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default;
0540 
0541 protected:
0542     QStyleOptionSpinBox(int version);
0543 };
0544 #endif // QT_CONFIG(spinbox)
0545 
0546 #if QT_CONFIG(toolbutton)
0547 class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
0548 {
0549 public:
0550     enum StyleOptionType { Type = SO_ToolButton };
0551     enum StyleOptionVersion { Version = 1 };
0552 
0553     enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
0554                              HasMenu = 0x10 };
0555     Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
0556 
0557     ToolButtonFeatures features;
0558     QIcon icon;
0559     QSize iconSize;
0560     QString text;
0561     Qt::ArrowType arrowType;
0562     Qt::ToolButtonStyle toolButtonStyle;
0563     QPoint pos;
0564     QFont font;
0565 
0566     QStyleOptionToolButton();
0567     QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0568     QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default;
0569 
0570 protected:
0571     QStyleOptionToolButton(int version);
0572 };
0573 
0574 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
0575 #endif  // QT_CONFIG(toolbutton)
0576 
0577 class Q_WIDGETS_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
0578 {
0579 public:
0580     enum StyleOptionType { Type = SO_ComboBox };
0581     enum StyleOptionVersion { Version = 1 };
0582 
0583     bool editable;
0584     QRect popupRect;
0585     bool frame;
0586     QString currentText;
0587     QIcon currentIcon;
0588     QSize iconSize;
0589     Qt::Alignment textAlignment = Qt::AlignLeft | Qt::AlignVCenter;
0590 
0591     QStyleOptionComboBox();
0592     QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0593     QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default;
0594 
0595 protected:
0596     QStyleOptionComboBox(int version);
0597 };
0598 
0599 class Q_WIDGETS_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
0600 {
0601 public:
0602     enum StyleOptionType { Type = SO_TitleBar };
0603     enum StyleOptionVersion { Version = 1 };
0604 
0605     QString text;
0606     QIcon icon;
0607     int titleBarState;
0608     Qt::WindowFlags titleBarFlags;
0609 
0610     QStyleOptionTitleBar();
0611     QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0612     QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default;
0613 
0614 protected:
0615     QStyleOptionTitleBar(int version);
0616 };
0617 
0618 class Q_WIDGETS_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
0619 {
0620 public:
0621     enum StyleOptionType { Type = SO_GroupBox };
0622     enum StyleOptionVersion { Version = 1 };
0623 
0624     QStyleOptionFrame::FrameFeatures features;
0625     QString text;
0626     Qt::Alignment textAlignment;
0627     QColor textColor;
0628     int lineWidth;
0629     int midLineWidth;
0630 
0631     QStyleOptionGroupBox();
0632     QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0633     QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default;
0634 protected:
0635     QStyleOptionGroupBox(int version);
0636 };
0637 
0638 class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
0639 {
0640 public:
0641     enum StyleOptionType { Type = SO_SizeGrip };
0642     enum StyleOptionVersion { Version = 1 };
0643 
0644     Qt::Corner corner;
0645 
0646     QStyleOptionSizeGrip();
0647     QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0648     QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default;
0649 protected:
0650     QStyleOptionSizeGrip(int version);
0651 };
0652 
0653 class Q_WIDGETS_EXPORT QStyleOptionGraphicsItem : public QStyleOption
0654 {
0655 public:
0656     enum StyleOptionType { Type = SO_GraphicsItem };
0657     enum StyleOptionVersion { Version = 1 };
0658 
0659     QRectF exposedRect;
0660 
0661     QStyleOptionGraphicsItem();
0662     QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
0663     QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default;
0664     static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
0665 protected:
0666     QStyleOptionGraphicsItem(int version);
0667 };
0668 
0669 template <typename T>
0670 T qstyleoption_cast(const QStyleOption *opt)
0671 {
0672     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0673     if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
0674         || int(Opt::Type) == QStyleOption::SO_Default
0675         || (int(Opt::Type) == QStyleOption::SO_Complex
0676             && opt->type > QStyleOption::SO_Complex)))
0677         return static_cast<T>(opt);
0678     return nullptr;
0679 }
0680 
0681 template <typename T>
0682 T qstyleoption_cast(QStyleOption *opt)
0683 {
0684     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0685     if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
0686         || int(Opt::Type) == QStyleOption::SO_Default
0687         || (int(Opt::Type) == QStyleOption::SO_Complex
0688             && opt->type > QStyleOption::SO_Complex)))
0689         return static_cast<T>(opt);
0690     return nullptr;
0691 }
0692 
0693 // -------------------------- QStyleHintReturn -------------------------------
0694 class Q_WIDGETS_EXPORT QStyleHintReturn {
0695 public:
0696     enum HintReturnType {
0697         SH_Default=0xf000, SH_Mask, SH_Variant
0698     };
0699 
0700     enum StyleOptionType { Type = SH_Default };
0701     enum StyleOptionVersion { Version = 1 };
0702 
0703     QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
0704     ~QStyleHintReturn();
0705 
0706     int version;
0707     int type;
0708 };
0709 
0710 class Q_WIDGETS_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
0711 public:
0712     enum StyleOptionType { Type = SH_Mask };
0713     enum StyleOptionVersion { Version = 1 };
0714 
0715     QStyleHintReturnMask();
0716     ~QStyleHintReturnMask();
0717 
0718     QRegion region;
0719 };
0720 
0721 class Q_WIDGETS_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
0722 public:
0723     enum StyleOptionType { Type = SH_Variant };
0724     enum StyleOptionVersion { Version = 1 };
0725 
0726     QStyleHintReturnVariant();
0727     ~QStyleHintReturnVariant();
0728 
0729     QVariant variant;
0730 };
0731 
0732 template <typename T>
0733 T qstyleoption_cast(const QStyleHintReturn *hint)
0734 {
0735     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0736     if (hint && hint->version <= Opt::Version &&
0737         (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
0738         return static_cast<T>(hint);
0739     return nullptr;
0740 }
0741 
0742 template <typename T>
0743 T qstyleoption_cast(QStyleHintReturn *hint)
0744 {
0745     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0746     if (hint && hint->version <= Opt::Version &&
0747         (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
0748         return static_cast<T>(hint);
0749     return nullptr;
0750 }
0751 
0752 #if !defined(QT_NO_DEBUG_STREAM)
0753 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
0754 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
0755 #endif
0756 
0757 QT_END_NAMESPACE
0758 
0759 #endif // QSTYLEOPTION_H