Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-04 09:23:25

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,
0341 #if QT_DEPRECATED_SINCE(6, 11)
0342                         Margin Q_DECL_ENUMERATOR_DEPRECATED_X("Not used anywhere"),
0343 #endif
0344                         EmptyArea = TearOff + 2 };
0345     enum CheckType { NotCheckable, Exclusive, NonExclusive };
0346 
0347     MenuItemType menuItemType;
0348     CheckType checkType;
0349     bool checked;
0350     bool menuHasCheckableItems;
0351     QRect menuRect;
0352     QString text;
0353     QIcon icon;
0354     int maxIconWidth;
0355     int reservedShortcutWidth;
0356     QFont font;
0357 
0358     QStyleOptionMenuItem();
0359     QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
0360     QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default;
0361 
0362 protected:
0363     QStyleOptionMenuItem(int version);
0364 };
0365 
0366 // ### Qt7: merge with QStyleOptionMenuItem
0367 class QStyleOptionMenuItemV2 : public QStyleOptionMenuItem
0368 {
0369 public:
0370     enum StyleOptionVersion { Version = 2 };
0371 
0372     QStyleOptionMenuItemV2() : QStyleOptionMenuItemV2(Version) {}
0373     QStyleOptionMenuItemV2(const QStyleOptionMenuItemV2 &other) : QStyleOptionMenuItem(Version) { *this = other; }
0374     QStyleOptionMenuItemV2 &operator=(const QStyleOptionMenuItemV2 &) = default;
0375 
0376     bool mouseDown : 1;
0377     Q_DECL_UNUSED_MEMBER
0378     int unused : 31;
0379 protected:
0380     Q_WIDGETS_EXPORT QStyleOptionMenuItemV2(int version);
0381 };
0382 
0383 class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption
0384 {
0385 public:
0386     enum StyleOptionType { Type = SO_DockWidget };
0387     enum StyleOptionVersion { Version = 1 };
0388 
0389     QString title;
0390     bool closable;
0391     bool movable;
0392     bool floatable;
0393     bool verticalTitleBar;
0394 
0395     QStyleOptionDockWidget();
0396     QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
0397     QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default;
0398 
0399 protected:
0400     QStyleOptionDockWidget(int version);
0401 };
0402 
0403 #if QT_CONFIG(itemviews)
0404 
0405 class Q_WIDGETS_EXPORT QStyleOptionViewItem : public QStyleOption
0406 {
0407 public:
0408     enum StyleOptionType { Type = SO_ViewItem };
0409     enum StyleOptionVersion { Version = 1 };
0410 
0411     enum Position { Left, Right, Top, Bottom };
0412 
0413     Qt::Alignment displayAlignment;
0414     Qt::Alignment decorationAlignment;
0415     Qt::TextElideMode textElideMode;
0416     Position decorationPosition;
0417     QSize decorationSize;
0418     QFont font;
0419     bool showDecorationSelected;
0420 
0421     enum ViewItemFeature {
0422         None = 0x00,
0423         WrapText = 0x01,
0424         Alternate = 0x02,
0425         HasCheckIndicator = 0x04,
0426         HasDisplay = 0x08,
0427         HasDecoration = 0x10,
0428         IsDecoratedRootColumn = 0x20,
0429         IsDecorationForRootColumn = 0x40,
0430     };
0431     Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
0432 
0433     ViewItemFeatures features;
0434 
0435     QLocale locale;
0436     const QWidget *widget;
0437 
0438     enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
0439 
0440     QModelIndex index;
0441     Qt::CheckState checkState;
0442     QIcon icon;
0443     QString text;
0444     ViewItemPosition viewItemPosition;
0445     QBrush backgroundBrush;
0446 
0447     QStyleOptionViewItem();
0448     QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
0449     QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default;
0450 
0451 protected:
0452     QStyleOptionViewItem(int version);
0453 };
0454 
0455 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures)
0456 
0457 #endif // QT_CONFIG(itemviews)
0458 
0459 class Q_WIDGETS_EXPORT QStyleOptionToolBox : public QStyleOption
0460 {
0461 public:
0462     enum StyleOptionType { Type = SO_ToolBox };
0463     enum StyleOptionVersion { Version = 1 };
0464 
0465     QString text;
0466     QIcon icon;
0467 
0468     enum TabPosition { Beginning, Middle, End, OnlyOneTab };
0469     enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
0470 
0471     TabPosition position;
0472     SelectedPosition selectedPosition;
0473 
0474     QStyleOptionToolBox();
0475     QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
0476     QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default;
0477 
0478 protected:
0479     QStyleOptionToolBox(int version);
0480 };
0481 
0482 #if QT_CONFIG(rubberband)
0483 class Q_WIDGETS_EXPORT QStyleOptionRubberBand : public QStyleOption
0484 {
0485 public:
0486     enum StyleOptionType { Type = SO_RubberBand };
0487     enum StyleOptionVersion { Version = 1 };
0488 
0489     QRubberBand::Shape shape;
0490     bool opaque;
0491 
0492     QStyleOptionRubberBand();
0493     QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
0494     QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default;
0495 
0496 protected:
0497     QStyleOptionRubberBand(int version);
0498 };
0499 #endif // QT_CONFIG(rubberband)
0500 
0501 // -------------------------- Complex style options -------------------------------
0502 class Q_WIDGETS_EXPORT QStyleOptionComplex : public QStyleOption
0503 {
0504 public:
0505     enum StyleOptionType { Type = SO_Complex };
0506     enum StyleOptionVersion { Version = 1 };
0507 
0508     QStyle::SubControls subControls;
0509     QStyle::SubControls activeSubControls;
0510 
0511     QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
0512     QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
0513     QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default;
0514 };
0515 
0516 #if QT_CONFIG(slider)
0517 class Q_WIDGETS_EXPORT QStyleOptionSlider : public QStyleOptionComplex
0518 {
0519 public:
0520     enum StyleOptionType { Type = SO_Slider };
0521     enum StyleOptionVersion { Version = 1 };
0522 
0523     Qt::Orientation orientation;
0524     int minimum;
0525     int maximum;
0526     QSlider::TickPosition tickPosition;
0527     int tickInterval;
0528     bool upsideDown;
0529     int sliderPosition;
0530     int sliderValue;
0531     int singleStep;
0532     int pageStep;
0533     qreal notchTarget;
0534     bool dialWrapping;
0535     Qt::KeyboardModifiers keyboardModifiers;
0536 
0537     QStyleOptionSlider();
0538     QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0539     QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default;
0540 
0541 protected:
0542     QStyleOptionSlider(int version);
0543 };
0544 #endif // QT_CONFIG(slider)
0545 
0546 #if QT_CONFIG(spinbox)
0547 class Q_WIDGETS_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
0548 {
0549 public:
0550     enum StyleOptionType { Type = SO_SpinBox };
0551     enum StyleOptionVersion { Version = 1 };
0552 
0553     QAbstractSpinBox::ButtonSymbols buttonSymbols;
0554     QAbstractSpinBox::StepEnabled stepEnabled;
0555     bool frame;
0556 
0557     QStyleOptionSpinBox();
0558     QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0559     QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default;
0560 
0561 protected:
0562     QStyleOptionSpinBox(int version);
0563 };
0564 #endif // QT_CONFIG(spinbox)
0565 
0566 #if QT_CONFIG(toolbutton)
0567 class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
0568 {
0569 public:
0570     enum StyleOptionType { Type = SO_ToolButton };
0571     enum StyleOptionVersion { Version = 1 };
0572 
0573     enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
0574                              HasMenu = 0x10 };
0575     Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
0576 
0577     ToolButtonFeatures features;
0578     QIcon icon;
0579     QSize iconSize;
0580     QString text;
0581     Qt::ArrowType arrowType;
0582     Qt::ToolButtonStyle toolButtonStyle;
0583     QPoint pos;
0584     QFont font;
0585 
0586     QStyleOptionToolButton();
0587     QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0588     QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default;
0589 
0590 protected:
0591     QStyleOptionToolButton(int version);
0592 };
0593 
0594 Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
0595 #endif  // QT_CONFIG(toolbutton)
0596 
0597 class Q_WIDGETS_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
0598 {
0599 public:
0600     enum StyleOptionType { Type = SO_ComboBox };
0601     enum StyleOptionVersion { Version = 1 };
0602 
0603     bool editable;
0604     QRect popupRect;
0605     bool frame;
0606     QString currentText;
0607     QIcon currentIcon;
0608     QSize iconSize;
0609     Qt::Alignment textAlignment = Qt::AlignLeft | Qt::AlignVCenter;
0610 
0611     QStyleOptionComboBox();
0612     QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0613     QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default;
0614 
0615 protected:
0616     QStyleOptionComboBox(int version);
0617 };
0618 
0619 class Q_WIDGETS_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
0620 {
0621 public:
0622     enum StyleOptionType { Type = SO_TitleBar };
0623     enum StyleOptionVersion { Version = 1 };
0624 
0625     QString text;
0626     QIcon icon;
0627     int titleBarState;
0628     Qt::WindowFlags titleBarFlags;
0629 
0630     QStyleOptionTitleBar();
0631     QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0632     QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default;
0633 
0634 protected:
0635     QStyleOptionTitleBar(int version);
0636 };
0637 
0638 class Q_WIDGETS_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
0639 {
0640 public:
0641     enum StyleOptionType { Type = SO_GroupBox };
0642     enum StyleOptionVersion { Version = 1 };
0643 
0644     QStyleOptionFrame::FrameFeatures features;
0645     QString text;
0646     Qt::Alignment textAlignment;
0647     QColor textColor;
0648     int lineWidth;
0649     int midLineWidth;
0650 
0651     QStyleOptionGroupBox();
0652     QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0653     QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default;
0654 protected:
0655     QStyleOptionGroupBox(int version);
0656 };
0657 
0658 class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
0659 {
0660 public:
0661     enum StyleOptionType { Type = SO_SizeGrip };
0662     enum StyleOptionVersion { Version = 1 };
0663 
0664     Qt::Corner corner;
0665 
0666     QStyleOptionSizeGrip();
0667     QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
0668     QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default;
0669 protected:
0670     QStyleOptionSizeGrip(int version);
0671 };
0672 
0673 class Q_WIDGETS_EXPORT QStyleOptionGraphicsItem : public QStyleOption
0674 {
0675 public:
0676     enum StyleOptionType { Type = SO_GraphicsItem };
0677     enum StyleOptionVersion { Version = 1 };
0678 
0679     QRectF exposedRect;
0680 
0681     QStyleOptionGraphicsItem();
0682     QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
0683     QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default;
0684     static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
0685 protected:
0686     QStyleOptionGraphicsItem(int version);
0687 };
0688 
0689 template <typename T>
0690 T qstyleoption_cast(const QStyleOption *opt)
0691 {
0692     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0693     if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
0694         || int(Opt::Type) == QStyleOption::SO_Default
0695         || (int(Opt::Type) == QStyleOption::SO_Complex
0696             && opt->type > QStyleOption::SO_Complex)))
0697         return static_cast<T>(opt);
0698     return nullptr;
0699 }
0700 
0701 template <typename T>
0702 T qstyleoption_cast(QStyleOption *opt)
0703 {
0704     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0705     if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
0706         || int(Opt::Type) == QStyleOption::SO_Default
0707         || (int(Opt::Type) == QStyleOption::SO_Complex
0708             && opt->type > QStyleOption::SO_Complex)))
0709         return static_cast<T>(opt);
0710     return nullptr;
0711 }
0712 
0713 // -------------------------- QStyleHintReturn -------------------------------
0714 class Q_WIDGETS_EXPORT QStyleHintReturn {
0715 public:
0716     enum HintReturnType {
0717         SH_Default=0xf000, SH_Mask, SH_Variant
0718     };
0719 
0720     enum StyleOptionType { Type = SH_Default };
0721     enum StyleOptionVersion { Version = 1 };
0722 
0723     QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
0724     ~QStyleHintReturn();
0725 
0726     int version;
0727     int type;
0728 };
0729 
0730 class Q_WIDGETS_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
0731 public:
0732     enum StyleOptionType { Type = SH_Mask };
0733     enum StyleOptionVersion { Version = 1 };
0734 
0735     QStyleHintReturnMask();
0736     ~QStyleHintReturnMask();
0737 
0738     QRegion region;
0739 };
0740 
0741 class Q_WIDGETS_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
0742 public:
0743     enum StyleOptionType { Type = SH_Variant };
0744     enum StyleOptionVersion { Version = 1 };
0745 
0746     QStyleHintReturnVariant();
0747     ~QStyleHintReturnVariant();
0748 
0749     QVariant variant;
0750 };
0751 
0752 template <typename T>
0753 T qstyleoption_cast(const QStyleHintReturn *hint)
0754 {
0755     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0756     if (hint && hint->version <= Opt::Version &&
0757         (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
0758         return static_cast<T>(hint);
0759     return nullptr;
0760 }
0761 
0762 template <typename T>
0763 T qstyleoption_cast(QStyleHintReturn *hint)
0764 {
0765     typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
0766     if (hint && hint->version <= Opt::Version &&
0767         (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
0768         return static_cast<T>(hint);
0769     return nullptr;
0770 }
0771 
0772 #if !defined(QT_NO_DEBUG_STREAM)
0773 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
0774 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
0775 #endif
0776 
0777 QT_END_NAMESPACE
0778 
0779 #endif // QSTYLEOPTION_H