Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 09:09:37

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