qwidget.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878
  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 QWIDGET_H
  40. #define QWIDGET_H
  41. #include <QtGui/qwindowdefs.h>
  42. #include <QtCore/qobject.h>
  43. #include <QtCore/qmargins.h>
  44. #include <QtGui/qpaintdevice.h>
  45. #include <QtGui/qpalette.h>
  46. #include <QtGui/qfont.h>
  47. #include <QtGui/qfontmetrics.h>
  48. #include <QtGui/qfontinfo.h>
  49. #include <QtWidgets/qsizepolicy.h>
  50. #include <QtGui/qregion.h>
  51. #include <QtGui/qbrush.h>
  52. #include <QtGui/qcursor.h>
  53. #include <QtGui/qkeysequence.h>
  54. #ifdef QT_INCLUDE_COMPAT
  55. #include <QtGui/qevent.h>
  56. #endif
  57. QT_BEGIN_NAMESPACE
  58. class QLayout;
  59. class QWSRegionManager;
  60. class QStyle;
  61. class QAction;
  62. class QVariant;
  63. class QWindow;
  64. class QActionEvent;
  65. class QMouseEvent;
  66. class QWheelEvent;
  67. class QHoverEvent;
  68. class QKeyEvent;
  69. class QFocusEvent;
  70. class QPaintEvent;
  71. class QMoveEvent;
  72. class QResizeEvent;
  73. class QCloseEvent;
  74. class QContextMenuEvent;
  75. class QInputMethodEvent;
  76. class QTabletEvent;
  77. class QDragEnterEvent;
  78. class QDragMoveEvent;
  79. class QDragLeaveEvent;
  80. class QDropEvent;
  81. class QShowEvent;
  82. class QHideEvent;
  83. class QIcon;
  84. class QBackingStore;
  85. class QPlatformWindow;
  86. class QLocale;
  87. class QGraphicsProxyWidget;
  88. class QGraphicsEffect;
  89. class QRasterWindowSurface;
  90. class QUnifiedToolbarSurface;
  91. class QPixmap;
  92. #ifndef QT_NO_DEBUG_STREAM
  93. class QDebug;
  94. #endif
  95. class QWidgetData
  96. {
  97. public:
  98. WId winid;
  99. uint widget_attributes;
  100. Qt::WindowFlags window_flags;
  101. uint window_state : 4;
  102. uint focus_policy : 4;
  103. uint sizehint_forced :1;
  104. uint is_closing :1;
  105. uint in_show : 1;
  106. uint in_set_window_state : 1;
  107. mutable uint fstrut_dirty : 1;
  108. uint context_menu_policy : 3;
  109. uint window_modality : 2;
  110. uint in_destructor : 1;
  111. uint unused : 13;
  112. QRect crect;
  113. mutable QPalette pal;
  114. QFont fnt;
  115. QRect wrect;
  116. };
  117. class QWidgetPrivate;
  118. class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
  119. {
  120. Q_OBJECT
  121. Q_DECLARE_PRIVATE(QWidget)
  122. Q_PROPERTY(bool modal READ isModal)
  123. Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)
  124. Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
  125. Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
  126. Q_PROPERTY(QRect frameGeometry READ frameGeometry)
  127. Q_PROPERTY(QRect normalGeometry READ normalGeometry)
  128. Q_PROPERTY(int x READ x)
  129. Q_PROPERTY(int y READ y)
  130. Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)
  131. Q_PROPERTY(QSize frameSize READ frameSize)
  132. Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)
  133. Q_PROPERTY(int width READ width)
  134. Q_PROPERTY(int height READ height)
  135. Q_PROPERTY(QRect rect READ rect)
  136. Q_PROPERTY(QRect childrenRect READ childrenRect)
  137. Q_PROPERTY(QRegion childrenRegion READ childrenRegion)
  138. Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
  139. Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
  140. Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
  141. Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false)
  142. Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false)
  143. Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false)
  144. Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false)
  145. Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
  146. Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
  147. Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
  148. Q_PROPERTY(QFont font READ font WRITE setFont)
  149. #ifndef QT_NO_CURSOR
  150. Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
  151. #endif
  152. Q_PROPERTY(bool mouseTracking READ hasMouseTracking WRITE setMouseTracking)
  153. Q_PROPERTY(bool isActiveWindow READ isActiveWindow)
  154. Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
  155. Q_PROPERTY(bool focus READ hasFocus)
  156. Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
  157. Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)
  158. Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
  159. Q_PROPERTY(bool minimized READ isMinimized)
  160. Q_PROPERTY(bool maximized READ isMaximized)
  161. Q_PROPERTY(bool fullScreen READ isFullScreen)
  162. Q_PROPERTY(QSize sizeHint READ sizeHint)
  163. Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
  164. Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
  165. Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle NOTIFY windowTitleChanged DESIGNABLE isWindow)
  166. Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon NOTIFY windowIconChanged DESIGNABLE isWindow)
  167. Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText NOTIFY windowIconTextChanged DESIGNABLE isWindow) // deprecated
  168. Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity DESIGNABLE isWindow)
  169. Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified DESIGNABLE isWindow)
  170. #ifndef QT_NO_TOOLTIP
  171. Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
  172. Q_PROPERTY(int toolTipDuration READ toolTipDuration WRITE setToolTipDuration)
  173. #endif
  174. #ifndef QT_NO_STATUSTIP
  175. Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)
  176. #endif
  177. #ifndef QT_NO_WHATSTHIS
  178. Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis)
  179. #endif
  180. #ifndef QT_NO_ACCESSIBILITY
  181. Q_PROPERTY(QString accessibleName READ accessibleName WRITE setAccessibleName)
  182. Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription)
  183. #endif
  184. Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
  185. QDOC_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
  186. Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)
  187. #ifndef QT_NO_STYLE_STYLESHEET
  188. Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)
  189. #endif
  190. Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET unsetLocale)
  191. Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath DESIGNABLE isWindow)
  192. Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)
  193. public:
  194. enum RenderFlag {
  195. DrawWindowBackground = 0x1,
  196. DrawChildren = 0x2,
  197. IgnoreMask = 0x4
  198. };
  199. Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
  200. explicit QWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
  201. ~QWidget();
  202. int devType() const Q_DECL_OVERRIDE;
  203. WId winId() const;
  204. void createWinId(); // internal, going away
  205. inline WId internalWinId() const { return data->winid; }
  206. WId effectiveWinId() const;
  207. // GUI style setting
  208. QStyle *style() const;
  209. void setStyle(QStyle *);
  210. // Widget types and states
  211. bool isTopLevel() const;
  212. bool isWindow() const;
  213. bool isModal() const;
  214. Qt::WindowModality windowModality() const;
  215. void setWindowModality(Qt::WindowModality windowModality);
  216. bool isEnabled() const;
  217. bool isEnabledTo(const QWidget *) const;
  218. bool isEnabledToTLW() const;
  219. public Q_SLOTS:
  220. void setEnabled(bool);
  221. void setDisabled(bool);
  222. void setWindowModified(bool);
  223. // Widget coordinates
  224. public:
  225. QRect frameGeometry() const;
  226. const QRect &geometry() const;
  227. QRect normalGeometry() const;
  228. int x() const;
  229. int y() const;
  230. QPoint pos() const;
  231. QSize frameSize() const;
  232. QSize size() const;
  233. inline int width() const;
  234. inline int height() const;
  235. inline QRect rect() const;
  236. QRect childrenRect() const;
  237. QRegion childrenRegion() const;
  238. QSize minimumSize() const;
  239. QSize maximumSize() const;
  240. int minimumWidth() const;
  241. int minimumHeight() const;
  242. int maximumWidth() const;
  243. int maximumHeight() const;
  244. void setMinimumSize(const QSize &);
  245. void setMinimumSize(int minw, int minh);
  246. void setMaximumSize(const QSize &);
  247. void setMaximumSize(int maxw, int maxh);
  248. void setMinimumWidth(int minw);
  249. void setMinimumHeight(int minh);
  250. void setMaximumWidth(int maxw);
  251. void setMaximumHeight(int maxh);
  252. #ifdef Q_QDOC
  253. void setupUi(QWidget *widget);
  254. #endif
  255. QSize sizeIncrement() const;
  256. void setSizeIncrement(const QSize &);
  257. void setSizeIncrement(int w, int h);
  258. QSize baseSize() const;
  259. void setBaseSize(const QSize &);
  260. void setBaseSize(int basew, int baseh);
  261. void setFixedSize(const QSize &);
  262. void setFixedSize(int w, int h);
  263. void setFixedWidth(int w);
  264. void setFixedHeight(int h);
  265. // Widget coordinate mapping
  266. QPoint mapToGlobal(const QPoint &) const;
  267. QPoint mapFromGlobal(const QPoint &) const;
  268. QPoint mapToParent(const QPoint &) const;
  269. QPoint mapFromParent(const QPoint &) const;
  270. QPoint mapTo(const QWidget *, const QPoint &) const;
  271. QPoint mapFrom(const QWidget *, const QPoint &) const;
  272. QWidget *window() const;
  273. QWidget *nativeParentWidget() const;
  274. inline QWidget *topLevelWidget() const { return window(); }
  275. // Widget appearance functions
  276. const QPalette &palette() const;
  277. void setPalette(const QPalette &);
  278. void setBackgroundRole(QPalette::ColorRole);
  279. QPalette::ColorRole backgroundRole() const;
  280. void setForegroundRole(QPalette::ColorRole);
  281. QPalette::ColorRole foregroundRole() const;
  282. const QFont &font() const;
  283. void setFont(const QFont &);
  284. QFontMetrics fontMetrics() const;
  285. QFontInfo fontInfo() const;
  286. #ifndef QT_NO_CURSOR
  287. QCursor cursor() const;
  288. void setCursor(const QCursor &);
  289. void unsetCursor();
  290. #endif
  291. void setMouseTracking(bool enable);
  292. bool hasMouseTracking() const;
  293. bool underMouse() const;
  294. void setMask(const QBitmap &);
  295. void setMask(const QRegion &);
  296. QRegion mask() const;
  297. void clearMask();
  298. void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(),
  299. const QRegion &sourceRegion = QRegion(),
  300. RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
  301. void render(QPainter *painter, const QPoint &targetOffset = QPoint(),
  302. const QRegion &sourceRegion = QRegion(),
  303. RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
  304. Q_INVOKABLE QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)));
  305. #ifndef QT_NO_GRAPHICSEFFECT
  306. QGraphicsEffect *graphicsEffect() const;
  307. void setGraphicsEffect(QGraphicsEffect *effect);
  308. #endif //QT_NO_GRAPHICSEFFECT
  309. #ifndef QT_NO_GESTURES
  310. void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags());
  311. void ungrabGesture(Qt::GestureType type);
  312. #endif
  313. public Q_SLOTS:
  314. void setWindowTitle(const QString &);
  315. #ifndef QT_NO_STYLE_STYLESHEET
  316. void setStyleSheet(const QString& styleSheet);
  317. #endif
  318. public:
  319. #ifndef QT_NO_STYLE_STYLESHEET
  320. QString styleSheet() const;
  321. #endif
  322. QString windowTitle() const;
  323. void setWindowIcon(const QIcon &icon);
  324. QIcon windowIcon() const;
  325. void setWindowIconText(const QString &);
  326. QString windowIconText() const;
  327. void setWindowRole(const QString &);
  328. QString windowRole() const;
  329. void setWindowFilePath(const QString &filePath);
  330. QString windowFilePath() const;
  331. void setWindowOpacity(qreal level);
  332. qreal windowOpacity() const;
  333. bool isWindowModified() const;
  334. #ifndef QT_NO_TOOLTIP
  335. void setToolTip(const QString &);
  336. QString toolTip() const;
  337. void setToolTipDuration(int msec);
  338. int toolTipDuration() const;
  339. #endif
  340. #ifndef QT_NO_STATUSTIP
  341. void setStatusTip(const QString &);
  342. QString statusTip() const;
  343. #endif
  344. #ifndef QT_NO_WHATSTHIS
  345. void setWhatsThis(const QString &);
  346. QString whatsThis() const;
  347. #endif
  348. #ifndef QT_NO_ACCESSIBILITY
  349. QString accessibleName() const;
  350. void setAccessibleName(const QString &name);
  351. QString accessibleDescription() const;
  352. void setAccessibleDescription(const QString &description);
  353. #endif
  354. void setLayoutDirection(Qt::LayoutDirection direction);
  355. Qt::LayoutDirection layoutDirection() const;
  356. void unsetLayoutDirection();
  357. void setLocale(const QLocale &locale);
  358. QLocale locale() const;
  359. void unsetLocale();
  360. inline bool isRightToLeft() const { return layoutDirection() == Qt::RightToLeft; }
  361. inline bool isLeftToRight() const { return layoutDirection() == Qt::LeftToRight; }
  362. public Q_SLOTS:
  363. inline void setFocus() { setFocus(Qt::OtherFocusReason); }
  364. public:
  365. bool isActiveWindow() const;
  366. void activateWindow();
  367. void clearFocus();
  368. void setFocus(Qt::FocusReason reason);
  369. Qt::FocusPolicy focusPolicy() const;
  370. void setFocusPolicy(Qt::FocusPolicy policy);
  371. bool hasFocus() const;
  372. static void setTabOrder(QWidget *, QWidget *);
  373. void setFocusProxy(QWidget *);
  374. QWidget *focusProxy() const;
  375. Qt::ContextMenuPolicy contextMenuPolicy() const;
  376. void setContextMenuPolicy(Qt::ContextMenuPolicy policy);
  377. // Grab functions
  378. void grabMouse();
  379. #ifndef QT_NO_CURSOR
  380. void grabMouse(const QCursor &);
  381. #endif
  382. void releaseMouse();
  383. void grabKeyboard();
  384. void releaseKeyboard();
  385. #ifndef QT_NO_SHORTCUT
  386. int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut);
  387. void releaseShortcut(int id);
  388. void setShortcutEnabled(int id, bool enable = true);
  389. void setShortcutAutoRepeat(int id, bool enable = true);
  390. #endif
  391. static QWidget *mouseGrabber();
  392. static QWidget *keyboardGrabber();
  393. // Update/refresh functions
  394. inline bool updatesEnabled() const;
  395. void setUpdatesEnabled(bool enable);
  396. #ifndef QT_NO_GRAPHICSVIEW
  397. QGraphicsProxyWidget *graphicsProxyWidget() const;
  398. #endif
  399. public Q_SLOTS:
  400. void update();
  401. void repaint();
  402. public:
  403. inline void update(int x, int y, int w, int h);
  404. void update(const QRect&);
  405. void update(const QRegion&);
  406. void repaint(int x, int y, int w, int h);
  407. void repaint(const QRect &);
  408. void repaint(const QRegion &);
  409. public Q_SLOTS:
  410. // Widget management functions
  411. virtual void setVisible(bool visible);
  412. void setHidden(bool hidden);
  413. void show();
  414. void hide();
  415. void showMinimized();
  416. void showMaximized();
  417. void showFullScreen();
  418. void showNormal();
  419. bool close();
  420. void raise();
  421. void lower();
  422. public:
  423. void stackUnder(QWidget*);
  424. void move(int x, int y);
  425. void move(const QPoint &);
  426. void resize(int w, int h);
  427. void resize(const QSize &);
  428. inline void setGeometry(int x, int y, int w, int h);
  429. void setGeometry(const QRect &);
  430. QByteArray saveGeometry() const;
  431. bool restoreGeometry(const QByteArray &geometry);
  432. void adjustSize();
  433. bool isVisible() const;
  434. bool isVisibleTo(const QWidget *) const;
  435. inline bool isHidden() const;
  436. bool isMinimized() const;
  437. bool isMaximized() const;
  438. bool isFullScreen() const;
  439. Qt::WindowStates windowState() const;
  440. void setWindowState(Qt::WindowStates state);
  441. void overrideWindowState(Qt::WindowStates state);
  442. virtual QSize sizeHint() const;
  443. virtual QSize minimumSizeHint() const;
  444. QSizePolicy sizePolicy() const;
  445. void setSizePolicy(QSizePolicy);
  446. inline void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical);
  447. virtual int heightForWidth(int) const;
  448. virtual bool hasHeightForWidth() const;
  449. QRegion visibleRegion() const;
  450. void setContentsMargins(int left, int top, int right, int bottom);
  451. void setContentsMargins(const QMargins &margins);
  452. void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
  453. QMargins contentsMargins() const;
  454. QRect contentsRect() const;
  455. public:
  456. QLayout *layout() const;
  457. void setLayout(QLayout *);
  458. void updateGeometry();
  459. void setParent(QWidget *parent);
  460. void setParent(QWidget *parent, Qt::WindowFlags f);
  461. void scroll(int dx, int dy);
  462. void scroll(int dx, int dy, const QRect&);
  463. // Misc. functions
  464. QWidget *focusWidget() const;
  465. QWidget *nextInFocusChain() const;
  466. QWidget *previousInFocusChain() const;
  467. // drag and drop
  468. bool acceptDrops() const;
  469. void setAcceptDrops(bool on);
  470. #ifndef QT_NO_ACTION
  471. //actions
  472. void addAction(QAction *action);
  473. #if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
  474. void addActions(const QList<QAction*> &actions);
  475. void insertActions(const QAction *before, const QList<QAction*> &actions);
  476. #else
  477. void addActions(QList<QAction*> actions);
  478. void insertActions(QAction *before, QList<QAction*> actions);
  479. #endif
  480. void insertAction(QAction *before, QAction *action);
  481. void removeAction(QAction *action);
  482. QList<QAction*> actions() const;
  483. #endif
  484. QWidget *parentWidget() const;
  485. void setWindowFlags(Qt::WindowFlags type);
  486. inline Qt::WindowFlags windowFlags() const;
  487. void overrideWindowFlags(Qt::WindowFlags type);
  488. inline Qt::WindowType windowType() const;
  489. static QWidget *find(WId);
  490. inline QWidget *childAt(int x, int y) const;
  491. QWidget *childAt(const QPoint &p) const;
  492. #if defined(Q_DEAD_CODE_FROM_QT4_X11)
  493. const QX11Info &x11Info() const;
  494. Qt::HANDLE x11PictureHandle() const;
  495. #endif
  496. #if defined(Q_DEAD_CODE_FROM_QT4_MAC)
  497. Qt::HANDLE macQDHandle() const;
  498. Qt::HANDLE macCGHandle() const;
  499. #endif
  500. void setAttribute(Qt::WidgetAttribute, bool on = true);
  501. inline bool testAttribute(Qt::WidgetAttribute) const;
  502. QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
  503. void ensurePolished() const;
  504. bool isAncestorOf(const QWidget *child) const;
  505. #ifdef QT_KEYPAD_NAVIGATION
  506. bool hasEditFocus() const;
  507. void setEditFocus(bool on);
  508. #endif
  509. bool autoFillBackground() const;
  510. void setAutoFillBackground(bool enabled);
  511. QBackingStore *backingStore() const;
  512. QWindow *windowHandle() const;
  513. static QWidget *createWindowContainer(QWindow *window, QWidget *parent=Q_NULLPTR, Qt::WindowFlags flags=Qt::WindowFlags());
  514. friend class QDesktopScreenWidget;
  515. Q_SIGNALS:
  516. void windowTitleChanged(const QString &title);
  517. void windowIconChanged(const QIcon &icon);
  518. void windowIconTextChanged(const QString &iconText);
  519. void customContextMenuRequested(const QPoint &pos);
  520. protected:
  521. // Event handlers
  522. bool event(QEvent *event) Q_DECL_OVERRIDE;
  523. virtual void mousePressEvent(QMouseEvent *event);
  524. virtual void mouseReleaseEvent(QMouseEvent *event);
  525. virtual void mouseDoubleClickEvent(QMouseEvent *event);
  526. virtual void mouseMoveEvent(QMouseEvent *event);
  527. #ifndef QT_NO_WHEELEVENT
  528. virtual void wheelEvent(QWheelEvent *event);
  529. #endif
  530. virtual void keyPressEvent(QKeyEvent *event);
  531. virtual void keyReleaseEvent(QKeyEvent *event);
  532. virtual void focusInEvent(QFocusEvent *event);
  533. virtual void focusOutEvent(QFocusEvent *event);
  534. virtual void enterEvent(QEvent *event);
  535. virtual void leaveEvent(QEvent *event);
  536. virtual void paintEvent(QPaintEvent *event);
  537. virtual void moveEvent(QMoveEvent *event);
  538. virtual void resizeEvent(QResizeEvent *event);
  539. virtual void closeEvent(QCloseEvent *event);
  540. #ifndef QT_NO_CONTEXTMENU
  541. virtual void contextMenuEvent(QContextMenuEvent *event);
  542. #endif
  543. #ifndef QT_NO_TABLETEVENT
  544. virtual void tabletEvent(QTabletEvent *event);
  545. #endif
  546. #ifndef QT_NO_ACTION
  547. virtual void actionEvent(QActionEvent *event);
  548. #endif
  549. #ifndef QT_NO_DRAGANDDROP
  550. virtual void dragEnterEvent(QDragEnterEvent *event);
  551. virtual void dragMoveEvent(QDragMoveEvent *event);
  552. virtual void dragLeaveEvent(QDragLeaveEvent *event);
  553. virtual void dropEvent(QDropEvent *event);
  554. #endif
  555. virtual void showEvent(QShowEvent *event);
  556. virtual void hideEvent(QHideEvent *event);
  557. virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
  558. // Misc. protected functions
  559. virtual void changeEvent(QEvent *);
  560. int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
  561. void initPainter(QPainter *painter) const Q_DECL_OVERRIDE;
  562. QPaintDevice *redirected(QPoint *offset) const Q_DECL_OVERRIDE;
  563. QPainter *sharedPainter() const Q_DECL_OVERRIDE;
  564. virtual void inputMethodEvent(QInputMethodEvent *);
  565. public:
  566. virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
  567. Qt::InputMethodHints inputMethodHints() const;
  568. void setInputMethodHints(Qt::InputMethodHints hints);
  569. protected Q_SLOTS:
  570. void updateMicroFocus();
  571. protected:
  572. void create(WId = 0, bool initializeWindow = true,
  573. bool destroyOldWindow = true);
  574. void destroy(bool destroyWindow = true,
  575. bool destroySubWindows = true);
  576. friend class QDataWidgetMapperPrivate; // for access to focusNextPrevChild
  577. virtual bool focusNextPrevChild(bool next);
  578. inline bool focusNextChild() { return focusNextPrevChild(true); }
  579. inline bool focusPreviousChild() { return focusNextPrevChild(false); }
  580. protected:
  581. QWidget(QWidgetPrivate &d, QWidget* parent, Qt::WindowFlags f);
  582. private:
  583. void setBackingStore(QBackingStore *store);
  584. bool testAttribute_helper(Qt::WidgetAttribute) const;
  585. QLayout *takeLayout();
  586. friend class QBackingStoreDevice;
  587. friend class QWidgetBackingStore;
  588. friend class QApplication;
  589. friend class QApplicationPrivate;
  590. friend class QGuiApplication;
  591. friend class QGuiApplicationPrivate;
  592. friend class QBaseApplication;
  593. friend class QPainter;
  594. friend class QPainterPrivate;
  595. friend class QPixmap; // for QPixmap::fill()
  596. friend class QFontMetrics;
  597. friend class QFontInfo;
  598. friend class QLayout;
  599. friend class QWidgetItem;
  600. friend class QWidgetItemV2;
  601. friend class QGLContext;
  602. friend class QGLWidget;
  603. friend class QGLWindowSurface;
  604. friend class QX11PaintEngine;
  605. friend class QWin32PaintEngine;
  606. friend class QShortcutPrivate;
  607. friend class QWindowSurface;
  608. friend class QGraphicsProxyWidget;
  609. friend class QGraphicsProxyWidgetPrivate;
  610. friend class QStyleSheetStyle;
  611. friend struct QWidgetExceptionCleaner;
  612. friend class QWidgetWindow;
  613. friend class QAccessibleWidget;
  614. friend class QAccessibleTable;
  615. #ifndef QT_NO_GESTURES
  616. friend class QGestureManager;
  617. friend class QWinNativePanGestureRecognizer;
  618. #endif // QT_NO_GESTURES
  619. friend class QWidgetEffectSourcePrivate;
  620. #ifdef Q_OS_MAC
  621. friend bool qt_mac_is_metal(const QWidget *w);
  622. #endif
  623. friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);
  624. friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);
  625. private:
  626. Q_DISABLE_COPY(QWidget)
  627. Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
  628. QWidgetData *data;
  629. };
  630. Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
  631. #ifndef Q_QDOC
  632. template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
  633. {
  634. if (!o || !o->isWidgetType()) return Q_NULLPTR;
  635. return static_cast<QWidget*>(o);
  636. }
  637. template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
  638. {
  639. if (!o || !o->isWidgetType()) return Q_NULLPTR;
  640. return static_cast<const QWidget*>(o);
  641. }
  642. #endif // !Q_QDOC
  643. inline QWidget *QWidget::childAt(int ax, int ay) const
  644. { return childAt(QPoint(ax, ay)); }
  645. inline Qt::WindowType QWidget::windowType() const
  646. { return static_cast<Qt::WindowType>(int(data->window_flags & Qt::WindowType_Mask)); }
  647. inline Qt::WindowFlags QWidget::windowFlags() const
  648. { return data->window_flags; }
  649. inline bool QWidget::isTopLevel() const
  650. { return (windowType() & Qt::Window); }
  651. inline bool QWidget::isWindow() const
  652. { return (windowType() & Qt::Window); }
  653. inline bool QWidget::isEnabled() const
  654. { return !testAttribute(Qt::WA_Disabled); }
  655. inline bool QWidget::isModal() const
  656. { return data->window_modality != Qt::NonModal; }
  657. inline bool QWidget::isEnabledToTLW() const
  658. { return isEnabled(); }
  659. inline int QWidget::minimumWidth() const
  660. { return minimumSize().width(); }
  661. inline int QWidget::minimumHeight() const
  662. { return minimumSize().height(); }
  663. inline int QWidget::maximumWidth() const
  664. { return maximumSize().width(); }
  665. inline int QWidget::maximumHeight() const
  666. { return maximumSize().height(); }
  667. inline void QWidget::setMinimumSize(const QSize &s)
  668. { setMinimumSize(s.width(),s.height()); }
  669. inline void QWidget::setMaximumSize(const QSize &s)
  670. { setMaximumSize(s.width(),s.height()); }
  671. inline void QWidget::setSizeIncrement(const QSize &s)
  672. { setSizeIncrement(s.width(),s.height()); }
  673. inline void QWidget::setBaseSize(const QSize &s)
  674. { setBaseSize(s.width(),s.height()); }
  675. inline const QFont &QWidget::font() const
  676. { return data->fnt; }
  677. inline QFontMetrics QWidget::fontMetrics() const
  678. { return QFontMetrics(data->fnt); }
  679. inline QFontInfo QWidget::fontInfo() const
  680. { return QFontInfo(data->fnt); }
  681. inline void QWidget::setMouseTracking(bool enable)
  682. { setAttribute(Qt::WA_MouseTracking, enable); }
  683. inline bool QWidget::hasMouseTracking() const
  684. { return testAttribute(Qt::WA_MouseTracking); }
  685. inline bool QWidget::underMouse() const
  686. { return testAttribute(Qt::WA_UnderMouse); }
  687. inline bool QWidget::updatesEnabled() const
  688. { return !testAttribute(Qt::WA_UpdatesDisabled); }
  689. inline void QWidget::update(int ax, int ay, int aw, int ah)
  690. { update(QRect(ax, ay, aw, ah)); }
  691. inline bool QWidget::isVisible() const
  692. { return testAttribute(Qt::WA_WState_Visible); }
  693. inline bool QWidget::isHidden() const
  694. { return testAttribute(Qt::WA_WState_Hidden); }
  695. inline void QWidget::move(int ax, int ay)
  696. { move(QPoint(ax, ay)); }
  697. inline void QWidget::resize(int w, int h)
  698. { resize(QSize(w, h)); }
  699. inline void QWidget::setGeometry(int ax, int ay, int aw, int ah)
  700. { setGeometry(QRect(ax, ay, aw, ah)); }
  701. inline QRect QWidget::rect() const
  702. { return QRect(0,0,data->crect.width(),data->crect.height()); }
  703. inline const QRect &QWidget::geometry() const
  704. { return data->crect; }
  705. inline QSize QWidget::size() const
  706. { return data->crect.size(); }
  707. inline int QWidget::width() const
  708. { return data->crect.width(); }
  709. inline int QWidget::height() const
  710. { return data->crect.height(); }
  711. inline QWidget *QWidget::parentWidget() const
  712. { return static_cast<QWidget *>(QObject::parent()); }
  713. inline void QWidget::setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver)
  714. { setSizePolicy(QSizePolicy(hor, ver)); }
  715. inline bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
  716. {
  717. if (attribute < int(8*sizeof(uint)))
  718. return data->widget_attributes & (1<<attribute);
  719. return testAttribute_helper(attribute);
  720. }
  721. #define QWIDGETSIZE_MAX ((1<<24)-1)
  722. #ifndef QT_NO_DEBUG_STREAM
  723. Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QWidget *);
  724. #endif
  725. QT_END_NAMESPACE
  726. #endif // QWIDGET_H