1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSTYLEOPTION_H
5#define QSTYLEOPTION_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtCore/qlocale.h>
9#include <QtCore/qvariant.h>
10#if QT_CONFIG(spinbox)
11#include <QtWidgets/qabstractspinbox.h>
12#endif
13#include <QtGui/qicon.h>
14#include <QtGui/qtransform.h>
15#if QT_CONFIG(slider)
16#include <QtWidgets/qslider.h>
17#endif
18#include <QtWidgets/qstyle.h>
19#if QT_CONFIG(tabbar)
20#include <QtWidgets/qtabbar.h>
21#endif
22#if QT_CONFIG(tabwidget)
23#include <QtWidgets/qtabwidget.h>
24#endif
25#if QT_CONFIG(rubberband)
26#include <QtWidgets/qrubberband.h>
27#endif
28#include <QtWidgets/qframe.h>
29#if QT_CONFIG(itemviews)
30# include <QtCore/qabstractitemmodel.h>
31#endif
32
33QT_BEGIN_NAMESPACE
34
35
36class QDebug;
37
38class Q_WIDGETS_EXPORT QStyleOption
39{
40public:
41 enum OptionType {
42 SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
43 SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header,
44 SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame,
45 SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,
46
47 SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
48 SO_TitleBar, SO_GroupBox, SO_SizeGrip,
49
50 SO_CustomBase = 0xf00,
51 SO_ComplexCustomBase = 0xf000000
52 };
53
54 enum StyleOptionType { Type = SO_Default };
55 enum StyleOptionVersion { Version = 1 };
56
57 int version;
58 int type;
59 QStyle::State state;
60 Qt::LayoutDirection direction;
61 QRect rect;
62 QFontMetrics fontMetrics;
63 QPalette palette;
64 QObject *styleObject;
65
66 QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
67 QStyleOption(const QStyleOption &other);
68 ~QStyleOption();
69
70 void initFrom(const QWidget *w);
71 QStyleOption &operator=(const QStyleOption &other);
72};
73
74class Q_WIDGETS_EXPORT QStyleOptionFocusRect : public QStyleOption
75{
76public:
77 enum StyleOptionType { Type = SO_FocusRect };
78 enum StyleOptionVersion { Version = 1 };
79
80 QColor backgroundColor;
81
82 QStyleOptionFocusRect();
83 QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; }
84 QStyleOptionFocusRect &operator=(const QStyleOptionFocusRect &) = default;
85
86protected:
87 QStyleOptionFocusRect(int version);
88};
89
90class Q_WIDGETS_EXPORT QStyleOptionFrame : public QStyleOption
91{
92public:
93 enum StyleOptionType { Type = SO_Frame };
94 enum StyleOptionVersion { Version = 1 };
95
96 int lineWidth;
97 int midLineWidth;
98 enum FrameFeature {
99 None = 0x00,
100 Flat = 0x01,
101 Rounded = 0x02
102 };
103 Q_DECLARE_FLAGS(FrameFeatures, FrameFeature)
104 FrameFeatures features;
105 QFrame::Shape frameShape;
106
107 QStyleOptionFrame();
108 QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; }
109 QStyleOptionFrame &operator=(const QStyleOptionFrame &) = default;
110
111protected:
112 QStyleOptionFrame(int version);
113};
114
115Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures)
116
117#if QT_CONFIG(tabwidget)
118class Q_WIDGETS_EXPORT QStyleOptionTabWidgetFrame : public QStyleOption
119{
120public:
121 enum StyleOptionType { Type = SO_TabWidgetFrame };
122 enum StyleOptionVersion { Version = 1 };
123
124 int lineWidth;
125 int midLineWidth;
126 QTabBar::Shape shape;
127 QSize tabBarSize;
128 QSize rightCornerWidgetSize;
129 QSize leftCornerWidgetSize;
130 QRect tabBarRect;
131 QRect selectedTabRect;
132
133 QStyleOptionTabWidgetFrame();
134 inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other)
135 : QStyleOption(Version, Type) { *this = other; }
136 QStyleOptionTabWidgetFrame &operator=(const QStyleOptionTabWidgetFrame &) = default;
137
138protected:
139 QStyleOptionTabWidgetFrame(int version);
140};
141
142#endif // QT_CONFIG(tabwidget)
143
144
145#if QT_CONFIG(tabbar)
146class Q_WIDGETS_EXPORT QStyleOptionTabBarBase : public QStyleOption
147{
148public:
149 enum StyleOptionType { Type = SO_TabBarBase };
150 enum StyleOptionVersion { Version = 1 };
151
152 QTabBar::Shape shape;
153 QRect tabBarRect;
154 QRect selectedTabRect;
155 bool documentMode;
156
157 QStyleOptionTabBarBase();
158 QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; }
159 QStyleOptionTabBarBase &operator=(const QStyleOptionTabBarBase &) = default;
160
161protected:
162 QStyleOptionTabBarBase(int version);
163};
164
165#endif // QT_CONFIG(tabbar)
166
167class Q_WIDGETS_EXPORT QStyleOptionHeader : public QStyleOption
168{
169public:
170 enum StyleOptionType { Type = SO_Header };
171 enum StyleOptionVersion { Version = 1 };
172
173 enum SectionPosition { Beginning, Middle, End, OnlyOneSection };
174 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected,
175 NextAndPreviousAreSelected };
176 enum SortIndicator { None, SortUp, SortDown };
177
178 int section;
179 QString text;
180 Qt::Alignment textAlignment;
181 QIcon icon;
182 Qt::Alignment iconAlignment;
183 SectionPosition position;
184 SelectedPosition selectedPosition;
185 SortIndicator sortIndicator;
186 Qt::Orientation orientation;
187
188 QStyleOptionHeader();
189 QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }
190 QStyleOptionHeader &operator=(const QStyleOptionHeader &) = default;
191
192protected:
193 QStyleOptionHeader(int version);
194};
195
196// ### Qt7: merge with QStyleOptionHeader
197class Q_WIDGETS_EXPORT QStyleOptionHeaderV2 : public QStyleOptionHeader
198{
199public:
200 enum StyleOptionType { Type = SO_Header };
201 enum StyleOptionVersion { Version = 2 };
202
203 QStyleOptionHeaderV2();
204 QStyleOptionHeaderV2(const QStyleOptionHeaderV2 &other) : QStyleOptionHeader(Version) { *this = other; }
205 QStyleOptionHeaderV2 &operator=(const QStyleOptionHeaderV2 &) = default;
206
207 Qt::TextElideMode textElideMode:2;
208 bool isSectionDragTarget:1;
209 int unused:29;
210
211protected:
212 QStyleOptionHeaderV2(int version);
213};
214
215class Q_WIDGETS_EXPORT QStyleOptionButton : public QStyleOption
216{
217public:
218 enum StyleOptionType { Type = SO_Button };
219 enum StyleOptionVersion { Version = 1 };
220
221 enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04,
222 AutoDefaultButton = 0x08, CommandLinkButton = 0x10 };
223 Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature)
224
225 ButtonFeatures features;
226 QString text;
227 QIcon icon;
228 QSize iconSize;
229
230 QStyleOptionButton();
231 QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; }
232 QStyleOptionButton &operator=(const QStyleOptionButton &) = default;
233
234protected:
235 QStyleOptionButton(int version);
236};
237
238Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures)
239
240#if QT_CONFIG(tabbar)
241class Q_WIDGETS_EXPORT QStyleOptionTab : public QStyleOption
242{
243public:
244 enum StyleOptionType { Type = SO_Tab };
245 enum StyleOptionVersion { Version = 1 };
246
247 enum TabPosition { Beginning, Middle, End, OnlyOneTab, Moving };
248 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
249 enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01,
250 RightCornerWidget = 0x02 };
251 enum TabFeature { None = 0x00, HasFrame = 0x01, MinimumSizeHint = 0x02 };
252 Q_DECLARE_FLAGS(CornerWidgets, CornerWidget)
253 Q_DECLARE_FLAGS(TabFeatures, TabFeature)
254
255 QTabBar::Shape shape;
256 QString text;
257 QIcon icon;
258 int row;
259 TabPosition position;
260 SelectedPosition selectedPosition;
261 CornerWidgets cornerWidgets;
262 QSize iconSize;
263 bool documentMode;
264 QSize leftButtonSize;
265 QSize rightButtonSize;
266 TabFeatures features;
267 int tabIndex = -1;
268
269 QStyleOptionTab();
270 QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; }
271 QStyleOptionTab &operator=(const QStyleOptionTab &) = default;
272
273protected:
274 QStyleOptionTab(int version);
275};
276
277Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets)
278
279#endif // QT_CONFIG(tabbar)
280
281
282#if QT_CONFIG(toolbar)
283
284class Q_WIDGETS_EXPORT QStyleOptionToolBar : public QStyleOption
285{
286public:
287 enum StyleOptionType { Type = SO_ToolBar };
288 enum StyleOptionVersion { Version = 1 };
289 enum ToolBarPosition { Beginning, Middle, End, OnlyOne };
290 enum ToolBarFeature { None = 0x0, Movable = 0x1 };
291 Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature)
292 ToolBarPosition positionOfLine; // The toolbar line position
293 ToolBarPosition positionWithinLine; // The position within a toolbar
294 Qt::ToolBarArea toolBarArea; // The toolbar docking area
295 ToolBarFeatures features;
296 int lineWidth;
297 int midLineWidth;
298 QStyleOptionToolBar();
299 QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; }
300 QStyleOptionToolBar &operator=(const QStyleOptionToolBar &) = default;
301
302protected:
303 QStyleOptionToolBar(int version);
304};
305
306Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures)
307
308#endif // QT_CONFIG(toolbar)
309
310class Q_WIDGETS_EXPORT QStyleOptionProgressBar : public QStyleOption
311{
312public:
313 enum StyleOptionType { Type = SO_ProgressBar };
314 enum StyleOptionVersion { Version = 1 };
315
316 int minimum;
317 int maximum;
318 int progress;
319 QString text;
320 Qt::Alignment textAlignment;
321 bool textVisible;
322 bool invertedAppearance;
323 bool bottomToTop;
324
325 QStyleOptionProgressBar();
326 QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; }
327 QStyleOptionProgressBar &operator=(const QStyleOptionProgressBar &) = default;
328
329protected:
330 QStyleOptionProgressBar(int version);
331};
332
333class Q_WIDGETS_EXPORT QStyleOptionMenuItem : public QStyleOption
334{
335public:
336 enum StyleOptionType { Type = SO_MenuItem };
337 enum StyleOptionVersion { Version = 1 };
338
339 enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin,
340 EmptyArea };
341 enum CheckType { NotCheckable, Exclusive, NonExclusive };
342
343 MenuItemType menuItemType;
344 CheckType checkType;
345 bool checked;
346 bool menuHasCheckableItems;
347 QRect menuRect;
348 QString text;
349 QIcon icon;
350 int maxIconWidth;
351 int reservedShortcutWidth;
352 QFont font;
353
354 QStyleOptionMenuItem();
355 QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
356 QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default;
357
358protected:
359 QStyleOptionMenuItem(int version);
360};
361
362class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption
363{
364public:
365 enum StyleOptionType { Type = SO_DockWidget };
366 enum StyleOptionVersion { Version = 1 };
367
368 QString title;
369 bool closable;
370 bool movable;
371 bool floatable;
372 bool verticalTitleBar;
373
374 QStyleOptionDockWidget();
375 QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
376 QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default;
377
378protected:
379 QStyleOptionDockWidget(int version);
380};
381
382#if QT_CONFIG(itemviews)
383
384class Q_WIDGETS_EXPORT QStyleOptionViewItem : public QStyleOption
385{
386public:
387 enum StyleOptionType { Type = SO_ViewItem };
388 enum StyleOptionVersion { Version = 1 };
389
390 enum Position { Left, Right, Top, Bottom };
391
392 Qt::Alignment displayAlignment;
393 Qt::Alignment decorationAlignment;
394 Qt::TextElideMode textElideMode;
395 Position decorationPosition;
396 QSize decorationSize;
397 QFont font;
398 bool showDecorationSelected;
399
400 enum ViewItemFeature {
401 None = 0x00,
402 WrapText = 0x01,
403 Alternate = 0x02,
404 HasCheckIndicator = 0x04,
405 HasDisplay = 0x08,
406 HasDecoration = 0x10,
407 IsDecoratedRootColumn = 0x20,
408 IsDecorationForRootColumn = 0x40,
409 };
410 Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
411
412 ViewItemFeatures features;
413
414 QLocale locale;
415 const QWidget *widget;
416
417 enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
418
419 QModelIndex index;
420 Qt::CheckState checkState;
421 QIcon icon;
422 QString text;
423 ViewItemPosition viewItemPosition;
424 QBrush backgroundBrush;
425
426 QStyleOptionViewItem();
427 QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
428 QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default;
429
430protected:
431 QStyleOptionViewItem(int version);
432};
433
434Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures)
435
436#endif // QT_CONFIG(itemviews)
437
438class Q_WIDGETS_EXPORT QStyleOptionToolBox : public QStyleOption
439{
440public:
441 enum StyleOptionType { Type = SO_ToolBox };
442 enum StyleOptionVersion { Version = 1 };
443
444 QString text;
445 QIcon icon;
446
447 enum TabPosition { Beginning, Middle, End, OnlyOneTab };
448 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
449
450 TabPosition position;
451 SelectedPosition selectedPosition;
452
453 QStyleOptionToolBox();
454 QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
455 QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default;
456
457protected:
458 QStyleOptionToolBox(int version);
459};
460
461#if QT_CONFIG(rubberband)
462class Q_WIDGETS_EXPORT QStyleOptionRubberBand : public QStyleOption
463{
464public:
465 enum StyleOptionType { Type = SO_RubberBand };
466 enum StyleOptionVersion { Version = 1 };
467
468 QRubberBand::Shape shape;
469 bool opaque;
470
471 QStyleOptionRubberBand();
472 QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
473 QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default;
474
475protected:
476 QStyleOptionRubberBand(int version);
477};
478#endif // QT_CONFIG(rubberband)
479
480// -------------------------- Complex style options -------------------------------
481class Q_WIDGETS_EXPORT QStyleOptionComplex : public QStyleOption
482{
483public:
484 enum StyleOptionType { Type = SO_Complex };
485 enum StyleOptionVersion { Version = 1 };
486
487 QStyle::SubControls subControls;
488 QStyle::SubControls activeSubControls;
489
490 QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
491 QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
492 QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default;
493};
494
495#if QT_CONFIG(slider)
496class Q_WIDGETS_EXPORT QStyleOptionSlider : public QStyleOptionComplex
497{
498public:
499 enum StyleOptionType { Type = SO_Slider };
500 enum StyleOptionVersion { Version = 1 };
501
502 Qt::Orientation orientation;
503 int minimum;
504 int maximum;
505 QSlider::TickPosition tickPosition;
506 int tickInterval;
507 bool upsideDown;
508 int sliderPosition;
509 int sliderValue;
510 int singleStep;
511 int pageStep;
512 qreal notchTarget;
513 bool dialWrapping;
514 Qt::KeyboardModifiers keyboardModifiers;
515
516 QStyleOptionSlider();
517 QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
518 QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default;
519
520protected:
521 QStyleOptionSlider(int version);
522};
523#endif // QT_CONFIG(slider)
524
525#if QT_CONFIG(spinbox)
526class Q_WIDGETS_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
527{
528public:
529 enum StyleOptionType { Type = SO_SpinBox };
530 enum StyleOptionVersion { Version = 1 };
531
532 QAbstractSpinBox::ButtonSymbols buttonSymbols;
533 QAbstractSpinBox::StepEnabled stepEnabled;
534 bool frame;
535
536 QStyleOptionSpinBox();
537 QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
538 QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default;
539
540protected:
541 QStyleOptionSpinBox(int version);
542};
543#endif // QT_CONFIG(spinbox)
544
545#if QT_CONFIG(toolbutton)
546class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
547{
548public:
549 enum StyleOptionType { Type = SO_ToolButton };
550 enum StyleOptionVersion { Version = 1 };
551
552 enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
553 HasMenu = 0x10 };
554 Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
555
556 ToolButtonFeatures features;
557 QIcon icon;
558 QSize iconSize;
559 QString text;
560 Qt::ArrowType arrowType;
561 Qt::ToolButtonStyle toolButtonStyle;
562 QPoint pos;
563 QFont font;
564
565 QStyleOptionToolButton();
566 QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
567 QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default;
568
569protected:
570 QStyleOptionToolButton(int version);
571};
572
573Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
574#endif // QT_CONFIG(toolbutton)
575
576class Q_WIDGETS_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
577{
578public:
579 enum StyleOptionType { Type = SO_ComboBox };
580 enum StyleOptionVersion { Version = 1 };
581
582 bool editable;
583 QRect popupRect;
584 bool frame;
585 QString currentText;
586 QIcon currentIcon;
587 QSize iconSize;
588 Qt::Alignment textAlignment = Qt::AlignLeft | Qt::AlignVCenter;
589
590 QStyleOptionComboBox();
591 QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
592 QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default;
593
594protected:
595 QStyleOptionComboBox(int version);
596};
597
598class Q_WIDGETS_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
599{
600public:
601 enum StyleOptionType { Type = SO_TitleBar };
602 enum StyleOptionVersion { Version = 1 };
603
604 QString text;
605 QIcon icon;
606 int titleBarState;
607 Qt::WindowFlags titleBarFlags;
608
609 QStyleOptionTitleBar();
610 QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
611 QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default;
612
613protected:
614 QStyleOptionTitleBar(int version);
615};
616
617class Q_WIDGETS_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
618{
619public:
620 enum StyleOptionType { Type = SO_GroupBox };
621 enum StyleOptionVersion { Version = 1 };
622
623 QStyleOptionFrame::FrameFeatures features;
624 QString text;
625 Qt::Alignment textAlignment;
626 QColor textColor;
627 int lineWidth;
628 int midLineWidth;
629
630 QStyleOptionGroupBox();
631 QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
632 QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default;
633protected:
634 QStyleOptionGroupBox(int version);
635};
636
637class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
638{
639public:
640 enum StyleOptionType { Type = SO_SizeGrip };
641 enum StyleOptionVersion { Version = 1 };
642
643 Qt::Corner corner;
644
645 QStyleOptionSizeGrip();
646 QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
647 QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default;
648protected:
649 QStyleOptionSizeGrip(int version);
650};
651
652class Q_WIDGETS_EXPORT QStyleOptionGraphicsItem : public QStyleOption
653{
654public:
655 enum StyleOptionType { Type = SO_GraphicsItem };
656 enum StyleOptionVersion { Version = 1 };
657
658 QRectF exposedRect;
659
660 QStyleOptionGraphicsItem();
661 QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
662 QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default;
663 static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
664protected:
665 QStyleOptionGraphicsItem(int version);
666};
667
668template <typename T>
669T qstyleoption_cast(const QStyleOption *opt)
670{
671 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
672 if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
673 || int(Opt::Type) == QStyleOption::SO_Default
674 || (int(Opt::Type) == QStyleOption::SO_Complex
675 && opt->type > QStyleOption::SO_Complex)))
676 return static_cast<T>(opt);
677 return nullptr;
678}
679
680template <typename T>
681T qstyleoption_cast(QStyleOption *opt)
682{
683 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
684 if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
685 || int(Opt::Type) == QStyleOption::SO_Default
686 || (int(Opt::Type) == QStyleOption::SO_Complex
687 && opt->type > QStyleOption::SO_Complex)))
688 return static_cast<T>(opt);
689 return nullptr;
690}
691
692// -------------------------- QStyleHintReturn -------------------------------
693class Q_WIDGETS_EXPORT QStyleHintReturn {
694public:
695 enum HintReturnType {
696 SH_Default=0xf000, SH_Mask, SH_Variant
697 };
698
699 enum StyleOptionType { Type = SH_Default };
700 enum StyleOptionVersion { Version = 1 };
701
702 QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
703 ~QStyleHintReturn();
704
705 int version;
706 int type;
707};
708
709class Q_WIDGETS_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
710public:
711 enum StyleOptionType { Type = SH_Mask };
712 enum StyleOptionVersion { Version = 1 };
713
714 QStyleHintReturnMask();
715 ~QStyleHintReturnMask();
716
717 QRegion region;
718};
719
720class Q_WIDGETS_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
721public:
722 enum StyleOptionType { Type = SH_Variant };
723 enum StyleOptionVersion { Version = 1 };
724
725 QStyleHintReturnVariant();
726 ~QStyleHintReturnVariant();
727
728 QVariant variant;
729};
730
731template <typename T>
732T qstyleoption_cast(const QStyleHintReturn *hint)
733{
734 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
735 if (hint && hint->version <= Opt::Version &&
736 (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
737 return static_cast<T>(hint);
738 return nullptr;
739}
740
741template <typename T>
742T qstyleoption_cast(QStyleHintReturn *hint)
743{
744 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
745 if (hint && hint->version <= Opt::Version &&
746 (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
747 return static_cast<T>(hint);
748 return nullptr;
749}
750
751#if !defined(QT_NO_DEBUG_STREAM)
752Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
753Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
754#endif
755
756QT_END_NAMESPACE
757
758#endif // QSTYLEOPTION_H
759

source code of qtbase/src/widgets/styles/qstyleoption.h