qstyleoption.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2016 The Qt Company Ltd.
  4. ** Contact: https://www.qt.io/licensing/
  5. **
  6. ** This file is part of the QtWidgets module of the Qt Toolkit.
  7. **
  8. ** $QT_BEGIN_LICENSE:LGPL$
  9. ** Commercial License Usage
  10. ** Licensees holding valid commercial Qt licenses may use this file in
  11. ** accordance with the commercial license agreement provided with the
  12. ** Software or, alternatively, in accordance with the terms contained in
  13. ** a written agreement between you and The Qt Company. For licensing terms
  14. ** and conditions see https://www.qt.io/terms-conditions. For further
  15. ** information use the contact form at https://www.qt.io/contact-us.
  16. **
  17. ** GNU Lesser General Public License Usage
  18. ** Alternatively, this file may be used under the terms of the GNU Lesser
  19. ** General Public License version 3 as published by the Free Software
  20. ** Foundation and appearing in the file LICENSE.LGPL3 included in the
  21. ** packaging of this file. Please review the following information to
  22. ** ensure the GNU Lesser General Public License version 3 requirements
  23. ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
  24. **
  25. ** GNU General Public License Usage
  26. ** Alternatively, this file may be used under the terms of the GNU
  27. ** General Public License version 2.0 or (at your option) the GNU General
  28. ** Public license version 3 or any later version approved by the KDE Free
  29. ** Qt Foundation. The licenses are as published by the Free Software
  30. ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
  31. ** included in the packaging of this file. Please review the following
  32. ** information to ensure the GNU General Public License requirements will
  33. ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
  34. ** https://www.gnu.org/licenses/gpl-3.0.html.
  35. **
  36. ** $QT_END_LICENSE$
  37. **
  38. ****************************************************************************/
  39. #ifndef QSTYLEOPTION_H
  40. #define QSTYLEOPTION_H
  41. #include <QtCore/qvariant.h>
  42. #include <QtWidgets/qabstractspinbox.h>
  43. #include <QtGui/qicon.h>
  44. #include <QtGui/qmatrix.h>
  45. #include <QtWidgets/qslider.h>
  46. #include <QtWidgets/qstyle.h>
  47. #include <QtWidgets/qtabbar.h>
  48. #include <QtWidgets/qtabwidget.h>
  49. #include <QtWidgets/qrubberband.h>
  50. #include <QtWidgets/qframe.h>
  51. #ifndef QT_NO_ITEMVIEWS
  52. # include <QtCore/qabstractitemmodel.h>
  53. #endif
  54. QT_BEGIN_NAMESPACE
  55. class QDebug;
  56. class Q_WIDGETS_EXPORT QStyleOption
  57. {
  58. public:
  59. enum OptionType {
  60. SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
  61. SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header,
  62. SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame,
  63. SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,
  64. SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
  65. SO_TitleBar, SO_GroupBox, SO_SizeGrip,
  66. SO_CustomBase = 0xf00,
  67. SO_ComplexCustomBase = 0xf000000
  68. };
  69. enum StyleOptionType { Type = SO_Default };
  70. enum StyleOptionVersion { Version = 1 };
  71. int version;
  72. int type;
  73. QStyle::State state;
  74. Qt::LayoutDirection direction;
  75. QRect rect;
  76. QFontMetrics fontMetrics;
  77. QPalette palette;
  78. QObject *styleObject;
  79. QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
  80. QStyleOption(const QStyleOption &other);
  81. ~QStyleOption();
  82. void init(const QWidget *w);
  83. inline void initFrom(const QWidget *w) { init(w); }
  84. QStyleOption &operator=(const QStyleOption &other);
  85. };
  86. class Q_WIDGETS_EXPORT QStyleOptionFocusRect : public QStyleOption
  87. {
  88. public:
  89. enum StyleOptionType { Type = SO_FocusRect };
  90. enum StyleOptionVersion { Version = 1 };
  91. QColor backgroundColor;
  92. QStyleOptionFocusRect();
  93. QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; }
  94. protected:
  95. QStyleOptionFocusRect(int version);
  96. };
  97. class Q_WIDGETS_EXPORT QStyleOptionFrame : public QStyleOption
  98. {
  99. public:
  100. enum StyleOptionType { Type = SO_Frame };
  101. enum StyleOptionVersion { Version = 3 };
  102. int lineWidth;
  103. int midLineWidth;
  104. enum FrameFeature {
  105. None = 0x00,
  106. Flat = 0x01,
  107. Rounded = 0x02
  108. };
  109. Q_DECLARE_FLAGS(FrameFeatures, FrameFeature)
  110. FrameFeatures features;
  111. QFrame::Shape frameShape;
  112. QStyleOptionFrame();
  113. QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; }
  114. protected:
  115. QStyleOptionFrame(int version);
  116. };
  117. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures)
  118. typedef Q_DECL_DEPRECATED QStyleOptionFrame QStyleOptionFrameV2;
  119. typedef Q_DECL_DEPRECATED QStyleOptionFrame QStyleOptionFrameV3;
  120. #ifndef QT_NO_TABWIDGET
  121. class Q_WIDGETS_EXPORT QStyleOptionTabWidgetFrame : public QStyleOption
  122. {
  123. public:
  124. enum StyleOptionType { Type = SO_TabWidgetFrame };
  125. enum StyleOptionVersion { Version = 2 };
  126. int lineWidth;
  127. int midLineWidth;
  128. QTabBar::Shape shape;
  129. QSize tabBarSize;
  130. QSize rightCornerWidgetSize;
  131. QSize leftCornerWidgetSize;
  132. QRect tabBarRect;
  133. QRect selectedTabRect;
  134. QStyleOptionTabWidgetFrame();
  135. inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other)
  136. : QStyleOption(Version, Type) { *this = other; }
  137. protected:
  138. QStyleOptionTabWidgetFrame(int version);
  139. };
  140. typedef Q_DECL_DEPRECATED QStyleOptionTabWidgetFrame QStyleOptionTabWidgetFrameV2;
  141. #endif // QT_NO_TABWIDGET
  142. #ifndef QT_NO_TABBAR
  143. class Q_WIDGETS_EXPORT QStyleOptionTabBarBase : public QStyleOption
  144. {
  145. public:
  146. enum StyleOptionType { Type = SO_TabBarBase };
  147. enum StyleOptionVersion { Version = 2 };
  148. QTabBar::Shape shape;
  149. QRect tabBarRect;
  150. QRect selectedTabRect;
  151. bool documentMode;
  152. QStyleOptionTabBarBase();
  153. QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; }
  154. protected:
  155. QStyleOptionTabBarBase(int version);
  156. };
  157. typedef Q_DECL_DEPRECATED QStyleOptionTabBarBase QStyleOptionTabBarBaseV2;
  158. #endif // QT_NO_TABBAR
  159. class Q_WIDGETS_EXPORT QStyleOptionHeader : public QStyleOption
  160. {
  161. public:
  162. enum StyleOptionType { Type = SO_Header };
  163. enum StyleOptionVersion { Version = 1 };
  164. enum SectionPosition { Beginning, Middle, End, OnlyOneSection };
  165. enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected,
  166. NextAndPreviousAreSelected };
  167. enum SortIndicator { None, SortUp, SortDown };
  168. int section;
  169. QString text;
  170. Qt::Alignment textAlignment;
  171. QIcon icon;
  172. Qt::Alignment iconAlignment;
  173. SectionPosition position;
  174. SelectedPosition selectedPosition;
  175. SortIndicator sortIndicator;
  176. Qt::Orientation orientation;
  177. QStyleOptionHeader();
  178. QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }
  179. protected:
  180. QStyleOptionHeader(int version);
  181. };
  182. class Q_WIDGETS_EXPORT QStyleOptionButton : public QStyleOption
  183. {
  184. public:
  185. enum StyleOptionType { Type = SO_Button };
  186. enum StyleOptionVersion { Version = 1 };
  187. enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04,
  188. AutoDefaultButton = 0x08, CommandLinkButton = 0x10 };
  189. Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature)
  190. ButtonFeatures features;
  191. QString text;
  192. QIcon icon;
  193. QSize iconSize;
  194. QStyleOptionButton();
  195. QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; }
  196. protected:
  197. QStyleOptionButton(int version);
  198. };
  199. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures)
  200. #ifndef QT_NO_TABBAR
  201. class Q_WIDGETS_EXPORT QStyleOptionTab : public QStyleOption
  202. {
  203. public:
  204. enum StyleOptionType { Type = SO_Tab };
  205. enum StyleOptionVersion { Version = 3 };
  206. enum TabPosition { Beginning, Middle, End, OnlyOneTab };
  207. enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
  208. enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01,
  209. RightCornerWidget = 0x02 };
  210. enum TabFeature { None = 0x00, HasFrame = 0x01 };
  211. Q_DECLARE_FLAGS(CornerWidgets, CornerWidget)
  212. Q_DECLARE_FLAGS(TabFeatures, TabFeature)
  213. QTabBar::Shape shape;
  214. QString text;
  215. QIcon icon;
  216. int row;
  217. TabPosition position;
  218. SelectedPosition selectedPosition;
  219. CornerWidgets cornerWidgets;
  220. QSize iconSize;
  221. bool documentMode;
  222. QSize leftButtonSize;
  223. QSize rightButtonSize;
  224. TabFeatures features;
  225. QStyleOptionTab();
  226. QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; }
  227. protected:
  228. QStyleOptionTab(int version);
  229. };
  230. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets)
  231. typedef Q_DECL_DEPRECATED QStyleOptionTab QStyleOptionTabV2;
  232. typedef Q_DECL_DEPRECATED QStyleOptionTab QStyleOptionTabV3;
  233. #endif // QT_NO_TABBAR
  234. #ifndef QT_NO_TOOLBAR
  235. class Q_WIDGETS_EXPORT QStyleOptionToolBar : public QStyleOption
  236. {
  237. public:
  238. enum StyleOptionType { Type = SO_ToolBar };
  239. enum StyleOptionVersion { Version = 1 };
  240. enum ToolBarPosition { Beginning, Middle, End, OnlyOne };
  241. enum ToolBarFeature { None = 0x0, Movable = 0x1 };
  242. Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature)
  243. ToolBarPosition positionOfLine; // The toolbar line position
  244. ToolBarPosition positionWithinLine; // The position within a toolbar
  245. Qt::ToolBarArea toolBarArea; // The toolbar docking area
  246. ToolBarFeatures features;
  247. int lineWidth;
  248. int midLineWidth;
  249. QStyleOptionToolBar();
  250. QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; }
  251. protected:
  252. QStyleOptionToolBar(int version);
  253. };
  254. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures)
  255. #endif // QT_NO_TOOLBAR
  256. class Q_WIDGETS_EXPORT QStyleOptionProgressBar : public QStyleOption
  257. {
  258. public:
  259. enum StyleOptionType { Type = SO_ProgressBar };
  260. enum StyleOptionVersion { Version = 2 };
  261. int minimum;
  262. int maximum;
  263. int progress;
  264. QString text;
  265. Qt::Alignment textAlignment;
  266. bool textVisible;
  267. Qt::Orientation orientation; // ### Qt 6: remove
  268. bool invertedAppearance;
  269. bool bottomToTop;
  270. QStyleOptionProgressBar();
  271. QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; }
  272. protected:
  273. QStyleOptionProgressBar(int version);
  274. };
  275. typedef Q_DECL_DEPRECATED QStyleOptionProgressBar QStyleOptionProgressBarV2;
  276. class Q_WIDGETS_EXPORT QStyleOptionMenuItem : public QStyleOption
  277. {
  278. public:
  279. enum StyleOptionType { Type = SO_MenuItem };
  280. enum StyleOptionVersion { Version = 1 };
  281. enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin,
  282. EmptyArea };
  283. enum CheckType { NotCheckable, Exclusive, NonExclusive };
  284. MenuItemType menuItemType;
  285. CheckType checkType;
  286. bool checked;
  287. bool menuHasCheckableItems;
  288. QRect menuRect;
  289. QString text;
  290. QIcon icon;
  291. int maxIconWidth;
  292. int tabWidth;
  293. QFont font;
  294. QStyleOptionMenuItem();
  295. QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
  296. protected:
  297. QStyleOptionMenuItem(int version);
  298. };
  299. class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption
  300. {
  301. public:
  302. enum StyleOptionType { Type = SO_DockWidget };
  303. enum StyleOptionVersion { Version = 2 };
  304. QString title;
  305. bool closable;
  306. bool movable;
  307. bool floatable;
  308. bool verticalTitleBar;
  309. QStyleOptionDockWidget();
  310. QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
  311. protected:
  312. QStyleOptionDockWidget(int version);
  313. };
  314. typedef Q_DECL_DEPRECATED QStyleOptionDockWidget QStyleOptionDockWidgetV2;
  315. #ifndef QT_NO_ITEMVIEWS
  316. class Q_WIDGETS_EXPORT QStyleOptionViewItem : public QStyleOption
  317. {
  318. public:
  319. enum StyleOptionType { Type = SO_ViewItem };
  320. enum StyleOptionVersion { Version = 4 };
  321. enum Position { Left, Right, Top, Bottom };
  322. Qt::Alignment displayAlignment;
  323. Qt::Alignment decorationAlignment;
  324. Qt::TextElideMode textElideMode;
  325. Position decorationPosition;
  326. QSize decorationSize;
  327. QFont font;
  328. bool showDecorationSelected;
  329. enum ViewItemFeature {
  330. None = 0x00,
  331. WrapText = 0x01,
  332. Alternate = 0x02,
  333. HasCheckIndicator = 0x04,
  334. HasDisplay = 0x08,
  335. HasDecoration = 0x10
  336. };
  337. Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
  338. ViewItemFeatures features;
  339. QLocale locale;
  340. const QWidget *widget;
  341. enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
  342. QModelIndex index;
  343. Qt::CheckState checkState;
  344. QIcon icon;
  345. QString text;
  346. ViewItemPosition viewItemPosition;
  347. QBrush backgroundBrush;
  348. QStyleOptionViewItem();
  349. QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
  350. protected:
  351. QStyleOptionViewItem(int version);
  352. };
  353. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures)
  354. typedef Q_DECL_DEPRECATED QStyleOptionViewItem QStyleOptionViewItemV2;
  355. typedef Q_DECL_DEPRECATED QStyleOptionViewItem QStyleOptionViewItemV3;
  356. typedef Q_DECL_DEPRECATED QStyleOptionViewItem QStyleOptionViewItemV4;
  357. #endif // QT_NO_ITEMVIEWS
  358. class Q_WIDGETS_EXPORT QStyleOptionToolBox : public QStyleOption
  359. {
  360. public:
  361. enum StyleOptionType { Type = SO_ToolBox };
  362. enum StyleOptionVersion { Version = 2 };
  363. QString text;
  364. QIcon icon;
  365. enum TabPosition { Beginning, Middle, End, OnlyOneTab };
  366. enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
  367. TabPosition position;
  368. SelectedPosition selectedPosition;
  369. QStyleOptionToolBox();
  370. QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
  371. protected:
  372. QStyleOptionToolBox(int version);
  373. };
  374. typedef Q_DECL_DEPRECATED QStyleOptionToolBox QStyleOptionToolBoxV2;
  375. #ifndef QT_NO_RUBBERBAND
  376. class Q_WIDGETS_EXPORT QStyleOptionRubberBand : public QStyleOption
  377. {
  378. public:
  379. enum StyleOptionType { Type = SO_RubberBand };
  380. enum StyleOptionVersion { Version = 1 };
  381. QRubberBand::Shape shape;
  382. bool opaque;
  383. QStyleOptionRubberBand();
  384. QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
  385. protected:
  386. QStyleOptionRubberBand(int version);
  387. };
  388. #endif // QT_NO_RUBBERBAND
  389. // -------------------------- Complex style options -------------------------------
  390. class Q_WIDGETS_EXPORT QStyleOptionComplex : public QStyleOption
  391. {
  392. public:
  393. enum StyleOptionType { Type = SO_Complex };
  394. enum StyleOptionVersion { Version = 1 };
  395. QStyle::SubControls subControls;
  396. QStyle::SubControls activeSubControls;
  397. QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
  398. QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
  399. };
  400. #ifndef QT_NO_SLIDER
  401. class Q_WIDGETS_EXPORT QStyleOptionSlider : public QStyleOptionComplex
  402. {
  403. public:
  404. enum StyleOptionType { Type = SO_Slider };
  405. enum StyleOptionVersion { Version = 1 };
  406. Qt::Orientation orientation;
  407. int minimum;
  408. int maximum;
  409. QSlider::TickPosition tickPosition;
  410. int tickInterval;
  411. bool upsideDown;
  412. int sliderPosition;
  413. int sliderValue;
  414. int singleStep;
  415. int pageStep;
  416. qreal notchTarget;
  417. bool dialWrapping;
  418. QStyleOptionSlider();
  419. QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  420. protected:
  421. QStyleOptionSlider(int version);
  422. };
  423. #endif // QT_NO_SLIDER
  424. #ifndef QT_NO_SPINBOX
  425. class Q_WIDGETS_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
  426. {
  427. public:
  428. enum StyleOptionType { Type = SO_SpinBox };
  429. enum StyleOptionVersion { Version = 1 };
  430. QAbstractSpinBox::ButtonSymbols buttonSymbols;
  431. QAbstractSpinBox::StepEnabled stepEnabled;
  432. bool frame;
  433. QStyleOptionSpinBox();
  434. QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  435. protected:
  436. QStyleOptionSpinBox(int version);
  437. };
  438. #endif // QT_NO_SPINBOX
  439. class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
  440. {
  441. public:
  442. enum StyleOptionType { Type = SO_ToolButton };
  443. enum StyleOptionVersion { Version = 1 };
  444. enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
  445. HasMenu = 0x10 };
  446. Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
  447. ToolButtonFeatures features;
  448. QIcon icon;
  449. QSize iconSize;
  450. QString text;
  451. Qt::ArrowType arrowType;
  452. Qt::ToolButtonStyle toolButtonStyle;
  453. QPoint pos;
  454. QFont font;
  455. QStyleOptionToolButton();
  456. QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  457. protected:
  458. QStyleOptionToolButton(int version);
  459. };
  460. Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
  461. class Q_WIDGETS_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
  462. {
  463. public:
  464. enum StyleOptionType { Type = SO_ComboBox };
  465. enum StyleOptionVersion { Version = 1 };
  466. bool editable;
  467. QRect popupRect;
  468. bool frame;
  469. QString currentText;
  470. QIcon currentIcon;
  471. QSize iconSize;
  472. QStyleOptionComboBox();
  473. QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  474. protected:
  475. QStyleOptionComboBox(int version);
  476. };
  477. class Q_WIDGETS_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
  478. {
  479. public:
  480. enum StyleOptionType { Type = SO_TitleBar };
  481. enum StyleOptionVersion { Version = 1 };
  482. QString text;
  483. QIcon icon;
  484. int titleBarState;
  485. Qt::WindowFlags titleBarFlags;
  486. QStyleOptionTitleBar();
  487. QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  488. protected:
  489. QStyleOptionTitleBar(int version);
  490. };
  491. class Q_WIDGETS_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
  492. {
  493. public:
  494. enum StyleOptionType { Type = SO_GroupBox };
  495. enum StyleOptionVersion { Version = 1 };
  496. QStyleOptionFrame::FrameFeatures features;
  497. QString text;
  498. Qt::Alignment textAlignment;
  499. QColor textColor;
  500. int lineWidth;
  501. int midLineWidth;
  502. QStyleOptionGroupBox();
  503. QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  504. protected:
  505. QStyleOptionGroupBox(int version);
  506. };
  507. class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
  508. {
  509. public:
  510. enum StyleOptionType { Type = SO_SizeGrip };
  511. enum StyleOptionVersion { Version = 1 };
  512. Qt::Corner corner;
  513. QStyleOptionSizeGrip();
  514. QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
  515. protected:
  516. QStyleOptionSizeGrip(int version);
  517. };
  518. class Q_WIDGETS_EXPORT QStyleOptionGraphicsItem : public QStyleOption
  519. {
  520. public:
  521. enum StyleOptionType { Type = SO_GraphicsItem };
  522. enum StyleOptionVersion { Version = 1 };
  523. QRectF exposedRect;
  524. QMatrix matrix;
  525. qreal levelOfDetail;
  526. QStyleOptionGraphicsItem();
  527. QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
  528. static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
  529. protected:
  530. QStyleOptionGraphicsItem(int version);
  531. };
  532. template <typename T>
  533. T qstyleoption_cast(const QStyleOption *opt)
  534. {
  535. typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type Opt;
  536. if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
  537. || int(Opt::Type) == QStyleOption::SO_Default
  538. || (int(Opt::Type) == QStyleOption::SO_Complex
  539. && opt->type > QStyleOption::SO_Complex)))
  540. return static_cast<T>(opt);
  541. return Q_NULLPTR;
  542. }
  543. template <typename T>
  544. T qstyleoption_cast(QStyleOption *opt)
  545. {
  546. typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type Opt;
  547. if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
  548. || int(Opt::Type) == QStyleOption::SO_Default
  549. || (int(Opt::Type) == QStyleOption::SO_Complex
  550. && opt->type > QStyleOption::SO_Complex)))
  551. return static_cast<T>(opt);
  552. return Q_NULLPTR;
  553. }
  554. // -------------------------- QStyleHintReturn -------------------------------
  555. class Q_WIDGETS_EXPORT QStyleHintReturn {
  556. public:
  557. enum HintReturnType {
  558. SH_Default=0xf000, SH_Mask, SH_Variant
  559. };
  560. enum StyleOptionType { Type = SH_Default };
  561. enum StyleOptionVersion { Version = 1 };
  562. QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
  563. ~QStyleHintReturn();
  564. int version;
  565. int type;
  566. };
  567. class Q_WIDGETS_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
  568. public:
  569. enum StyleOptionType { Type = SH_Mask };
  570. enum StyleOptionVersion { Version = 1 };
  571. QStyleHintReturnMask();
  572. ~QStyleHintReturnMask();
  573. QRegion region;
  574. };
  575. class Q_WIDGETS_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
  576. public:
  577. enum StyleOptionType { Type = SH_Variant };
  578. enum StyleOptionVersion { Version = 1 };
  579. QStyleHintReturnVariant();
  580. ~QStyleHintReturnVariant();
  581. QVariant variant;
  582. };
  583. template <typename T>
  584. T qstyleoption_cast(const QStyleHintReturn *hint)
  585. {
  586. typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type Opt;
  587. if (hint && hint->version <= Opt::Version &&
  588. (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
  589. return static_cast<T>(hint);
  590. return Q_NULLPTR;
  591. }
  592. template <typename T>
  593. T qstyleoption_cast(QStyleHintReturn *hint)
  594. {
  595. typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type Opt;
  596. if (hint && hint->version <= Opt::Version &&
  597. (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
  598. return static_cast<T>(hint);
  599. return Q_NULLPTR;
  600. }
  601. #if !defined(QT_NO_DEBUG_STREAM)
  602. Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
  603. Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
  604. #endif
  605. QT_END_NAMESPACE
  606. #endif // QSTYLEOPTION_H