Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-02 09:29:30

0001 // Copyright (C) 2016 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 QWIDGET_H
0006 #define QWIDGET_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtGui/qwindowdefs.h>
0010 #include <QtCore/qobject.h>
0011 #include <QtCore/qmargins.h>
0012 #if QT_CONFIG(action)
0013 #include <QtGui/qaction.h>
0014 #endif
0015 #include <QtGui/qpaintdevice.h>
0016 #include <QtGui/qpalette.h>
0017 #include <QtGui/qfont.h>
0018 #include <QtGui/qfontmetrics.h>
0019 #include <QtGui/qfontinfo.h>
0020 #include <QtWidgets/qsizepolicy.h>
0021 #include <QtGui/qregion.h>
0022 #include <QtGui/qbrush.h>
0023 #include <QtGui/qcursor.h>
0024 #if QT_CONFIG(shortcut)
0025 #  include <QtGui/qkeysequence.h>
0026 #endif
0027 
0028 #ifdef QT_INCLUDE_COMPAT
0029 #include <QtGui/qevent.h>
0030 #endif
0031 
0032 QT_BEGIN_NAMESPACE
0033 
0034 
0035 class QLayout;
0036 class QStyle;
0037 class QAction;
0038 class QVariant;
0039 class QWindow;
0040 class QActionEvent;
0041 class QMouseEvent;
0042 class QWheelEvent;
0043 class QHoverEvent;
0044 class QKeyEvent;
0045 class QEnterEvent;
0046 class QFocusEvent;
0047 class QPaintEvent;
0048 class QMoveEvent;
0049 class QResizeEvent;
0050 class QCloseEvent;
0051 class QContextMenuEvent;
0052 class QInputMethodEvent;
0053 class QTabletEvent;
0054 class QDragEnterEvent;
0055 class QDragMoveEvent;
0056 class QDragLeaveEvent;
0057 class QDropEvent;
0058 class QScreen;
0059 class QShowEvent;
0060 class QHideEvent;
0061 class QIcon;
0062 class QBackingStore;
0063 class QPlatformWindow;
0064 class QLocale;
0065 class QGraphicsProxyWidget;
0066 class QGraphicsEffect;
0067 class QRasterWindowSurface;
0068 class QPixmap;
0069 #ifndef QT_NO_DEBUG_STREAM
0070 class QDebug;
0071 #endif
0072 
0073 class QWidgetData
0074 {
0075 public:
0076     WId winid;
0077     uint widget_attributes;
0078     Qt::WindowFlags window_flags;
0079     uint window_state : 4;
0080     uint focus_policy : 4;
0081     uint sizehint_forced :1;
0082     uint is_closing :1;
0083     uint in_show : 1;
0084     uint in_set_window_state : 1;
0085     mutable uint fstrut_dirty : 1;
0086     uint context_menu_policy : 3;
0087     uint window_modality : 2;
0088     uint in_destructor : 1;
0089     uint unused : 13;
0090     QRect crect;
0091     mutable QPalette pal;
0092     QFont fnt;
0093     QRect wrect;
0094 };
0095 
0096 class QWidgetPrivate;
0097 
0098 class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
0099 {
0100     Q_OBJECT
0101     Q_DECLARE_PRIVATE(QWidget)
0102 
0103     Q_PROPERTY(bool modal READ isModal)
0104     Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)
0105     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
0106     Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
0107     Q_PROPERTY(QRect frameGeometry READ frameGeometry)
0108     Q_PROPERTY(QRect normalGeometry READ normalGeometry)
0109     Q_PROPERTY(int x READ x)
0110     Q_PROPERTY(int y READ y)
0111     Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)
0112     Q_PROPERTY(QSize frameSize READ frameSize)
0113     Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)
0114     Q_PROPERTY(int width READ width)
0115     Q_PROPERTY(int height READ height)
0116     Q_PROPERTY(QRect rect READ rect)
0117     Q_PROPERTY(QRect childrenRect READ childrenRect)
0118     Q_PROPERTY(QRegion childrenRegion READ childrenRegion)
0119     Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
0120     Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
0121     Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
0122     Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false
0123                DESIGNABLE false)
0124     Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false
0125                DESIGNABLE false)
0126     Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false
0127                DESIGNABLE false)
0128     Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false
0129                DESIGNABLE false)
0130     Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
0131     Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
0132     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
0133     Q_PROPERTY(QFont font READ font WRITE setFont)
0134 #ifndef QT_NO_CURSOR
0135     Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
0136 #endif
0137     Q_PROPERTY(bool mouseTracking READ hasMouseTracking WRITE setMouseTracking)
0138     Q_PROPERTY(bool tabletTracking READ hasTabletTracking WRITE setTabletTracking)
0139     Q_PROPERTY(bool isActiveWindow READ isActiveWindow)
0140     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
0141     Q_PROPERTY(bool focus READ hasFocus)
0142     Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
0143     Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)
0144     Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
0145     Q_PROPERTY(bool minimized READ isMinimized)
0146     Q_PROPERTY(bool maximized READ isMaximized)
0147     Q_PROPERTY(bool fullScreen READ isFullScreen)
0148     Q_PROPERTY(QSize sizeHint READ sizeHint)
0149     Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
0150     Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
0151     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle NOTIFY windowTitleChanged)
0152     Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon NOTIFY windowIconChanged)
0153     Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText NOTIFY windowIconTextChanged) // deprecated
0154     Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity)
0155     Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified)
0156 #if QT_CONFIG(tooltip)
0157     Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
0158     Q_PROPERTY(int toolTipDuration READ toolTipDuration WRITE setToolTipDuration)
0159 #endif
0160 #if QT_CONFIG(statustip)
0161     Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)
0162 #endif
0163 #if QT_CONFIG(whatsthis)
0164     Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis)
0165 #endif
0166 #if QT_CONFIG(accessibility)
0167     Q_PROPERTY(QString accessibleName READ accessibleName WRITE setAccessibleName)
0168     Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription)
0169     Q_PROPERTY(QString accessibleIdentifier READ accessibleIdentifier WRITE setAccessibleIdentifier)
0170 #endif
0171     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
0172     QDOC_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
0173     Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)
0174 #ifndef QT_NO_STYLE_STYLESHEET
0175     Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)
0176 #endif
0177     Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET unsetLocale)
0178     Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath)
0179     Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)
0180 
0181 #if QT_CONFIG(action)
0182 #if 0
0183     // ### TODO: make this work (requires SFINAE-friendly connect())
0184     template <typename...Args>
0185     using compatible_action_slot_args = std::void_t<
0186         decltype(QObject::connect(std::declval<QAction*>(), &QAction::triggered,
0187                                   std::declval<Args>()...))
0188     >;
0189 #else
0190     // good-enough compromise for now
0191     template <typename...Args>
0192     using compatible_action_slot_args = std::enable_if_t<std::conjunction_v<
0193 #if QT_CONFIG(shortcut)
0194             std::disjunction<
0195                 std::is_same<Args, Qt::ConnectionType>,
0196                 std::negation<std::is_convertible<Args, QKeySequence>>
0197             >...,
0198 #endif
0199             std::negation<std::is_convertible<Args, QIcon>>...,
0200             std::negation<std::is_convertible<Args, const char*>>...,
0201             std::negation<std::is_convertible<Args, QString>>...
0202         >>;
0203 #endif
0204 #endif // QT_CONFIG(action)
0205 
0206 public:
0207     enum RenderFlag {
0208         DrawWindowBackground = 0x1,
0209         DrawChildren = 0x2,
0210         IgnoreMask = 0x4
0211     };
0212     Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
0213 
0214     explicit QWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
0215     ~QWidget();
0216 
0217     int devType() const override;
0218 
0219     WId winId() const;
0220     void createWinId(); // internal, going away
0221     inline WId internalWinId() const { return data->winid; }
0222     WId effectiveWinId() const;
0223 
0224     // GUI style setting
0225     QStyle *style() const;
0226     void setStyle(QStyle *);
0227     // Widget types and states
0228 
0229 #if QT_DEPRECATED_SINCE(6, 1)
0230     QT_DEPRECATED_VERSION_X_6_1("Use isWindow()")
0231     bool isTopLevel() const;
0232 #endif
0233     bool isWindow() const;
0234 
0235     bool isModal() const;
0236     Qt::WindowModality windowModality() const;
0237     void setWindowModality(Qt::WindowModality windowModality);
0238 
0239     bool isEnabled() const;
0240     bool isEnabledTo(const QWidget *) const;
0241 
0242 public Q_SLOTS:
0243     void setEnabled(bool);
0244     void setDisabled(bool);
0245     void setWindowModified(bool);
0246 
0247     // Widget coordinates
0248 
0249 public:
0250     QRect frameGeometry() const;
0251     const QRect &geometry() const;
0252     QRect normalGeometry() const;
0253 
0254     int x() const;
0255     int y() const;
0256     QPoint pos() const;
0257     QSize frameSize() const;
0258     QSize size() const;
0259     inline int width() const;
0260     inline int height() const;
0261     inline QRect rect() const;
0262     QRect childrenRect() const;
0263     QRegion childrenRegion() const;
0264 
0265     QSize minimumSize() const;
0266     QSize maximumSize() const;
0267     int minimumWidth() const;
0268     int minimumHeight() const;
0269     int maximumWidth() const;
0270     int maximumHeight() const;
0271     void setMinimumSize(const QSize &);
0272     void setMinimumSize(int minw, int minh);
0273     void setMaximumSize(const QSize &);
0274     void setMaximumSize(int maxw, int maxh);
0275     void setMinimumWidth(int minw);
0276     void setMinimumHeight(int minh);
0277     void setMaximumWidth(int maxw);
0278     void setMaximumHeight(int maxh);
0279 
0280 #ifdef Q_QDOC
0281     void setupUi(QWidget *widget);
0282 #endif
0283 
0284     QSize sizeIncrement() const;
0285     void setSizeIncrement(const QSize &);
0286     void setSizeIncrement(int w, int h);
0287     QSize baseSize() const;
0288     void setBaseSize(const QSize &);
0289     void setBaseSize(int basew, int baseh);
0290 
0291     void setFixedSize(const QSize &);
0292     void setFixedSize(int w, int h);
0293     void setFixedWidth(int w);
0294     void setFixedHeight(int h);
0295 
0296     // Widget coordinate mapping
0297 
0298     QPointF mapToGlobal(const QPointF &) const;
0299     QPoint mapToGlobal(const QPoint &) const;
0300     QPointF mapFromGlobal(const QPointF &) const;
0301     QPoint mapFromGlobal(const QPoint &) const;
0302     QPointF mapToParent(const QPointF &) const;
0303     QPoint mapToParent(const QPoint &) const;
0304     QPointF mapFromParent(const QPointF &) const;
0305     QPoint mapFromParent(const QPoint &) const;
0306     QPointF mapTo(const QWidget *, const QPointF &) const;
0307     QPoint mapTo(const QWidget *, const QPoint &) const;
0308     QPointF mapFrom(const QWidget *, const QPointF &) const;
0309     QPoint mapFrom(const QWidget *, const QPoint &) const;
0310 
0311     QWidget *window() const;
0312     QWidget *nativeParentWidget() const;
0313     inline QWidget *topLevelWidget() const { return window(); }
0314 
0315     // Widget appearance functions
0316     const QPalette &palette() const;
0317     void setPalette(const QPalette &);
0318 
0319     void setBackgroundRole(QPalette::ColorRole);
0320     QPalette::ColorRole backgroundRole() const;
0321 
0322     void setForegroundRole(QPalette::ColorRole);
0323     QPalette::ColorRole foregroundRole() const;
0324 
0325     const QFont &font() const;
0326     void setFont(const QFont &);
0327     QFontMetrics fontMetrics() const;
0328     QFontInfo fontInfo() const;
0329 
0330 #ifndef QT_NO_CURSOR
0331     QCursor cursor() const;
0332     void setCursor(const QCursor &);
0333     void unsetCursor();
0334 #endif
0335 
0336     void setMouseTracking(bool enable);
0337     bool hasMouseTracking() const;
0338     bool underMouse() const;
0339 
0340     void setTabletTracking(bool enable);
0341     bool hasTabletTracking() const;
0342 
0343     void setMask(const QBitmap &);
0344     void setMask(const QRegion &);
0345     QRegion mask() const;
0346     void clearMask();
0347 
0348     void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(),
0349                 const QRegion &sourceRegion = QRegion(),
0350                 RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
0351 
0352     void render(QPainter *painter, const QPoint &targetOffset = QPoint(),
0353                 const QRegion &sourceRegion = QRegion(),
0354                 RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
0355 
0356     Q_INVOKABLE QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)));
0357 
0358 #if QT_CONFIG(graphicseffect)
0359     QGraphicsEffect *graphicsEffect() const;
0360     void setGraphicsEffect(QGraphicsEffect *effect);
0361 #endif // QT_CONFIG(graphicseffect)
0362 
0363 #ifndef QT_NO_GESTURES
0364     void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags());
0365     void ungrabGesture(Qt::GestureType type);
0366 #endif
0367 
0368 public Q_SLOTS:
0369     void setWindowTitle(const QString &);
0370 #ifndef QT_NO_STYLE_STYLESHEET
0371     void setStyleSheet(const QString& styleSheet);
0372 #endif
0373 public:
0374 #ifndef QT_NO_STYLE_STYLESHEET
0375     QString styleSheet() const;
0376 #endif
0377     QString windowTitle() const;
0378     void setWindowIcon(const QIcon &icon);
0379     QIcon windowIcon() const;
0380     void setWindowIconText(const QString &);
0381     QString windowIconText() const;
0382     void setWindowRole(const QString &);
0383     QString windowRole() const;
0384     void setWindowFilePath(const QString &filePath);
0385     QString windowFilePath() const;
0386 
0387     void setWindowOpacity(qreal level);
0388     qreal windowOpacity() const;
0389 
0390     bool isWindowModified() const;
0391 #if QT_CONFIG(tooltip)
0392     void setToolTip(const QString &);
0393     QString toolTip() const;
0394     void setToolTipDuration(int msec);
0395     int toolTipDuration() const;
0396 #endif
0397 #if QT_CONFIG(statustip)
0398     void setStatusTip(const QString &);
0399     QString statusTip() const;
0400 #endif
0401 #if QT_CONFIG(whatsthis)
0402     void setWhatsThis(const QString &);
0403     QString whatsThis() const;
0404 #endif
0405 #if QT_CONFIG(accessibility)
0406     QString accessibleName() const;
0407     void setAccessibleName(const QString &name);
0408     QString accessibleDescription() const;
0409     void setAccessibleDescription(const QString &description);
0410     QString accessibleIdentifier() const;
0411     void setAccessibleIdentifier(const QString &identifier);
0412 #endif
0413 
0414     void setLayoutDirection(Qt::LayoutDirection direction);
0415     Qt::LayoutDirection layoutDirection() const;
0416     void unsetLayoutDirection();
0417 
0418     void setLocale(const QLocale &locale);
0419     QLocale locale() const;
0420     void unsetLocale();
0421 
0422     inline bool isRightToLeft() const { return layoutDirection() == Qt::RightToLeft; }
0423     inline bool isLeftToRight() const { return layoutDirection() == Qt::LeftToRight; }
0424 
0425 public Q_SLOTS:
0426     inline void setFocus() { setFocus(Qt::OtherFocusReason); }
0427 
0428 public:
0429     bool isActiveWindow() const;
0430     void activateWindow();
0431     void clearFocus();
0432 
0433     void setFocus(Qt::FocusReason reason);
0434     Qt::FocusPolicy focusPolicy() const;
0435     void setFocusPolicy(Qt::FocusPolicy policy);
0436     bool hasFocus() const;
0437     static void setTabOrder(QWidget *, QWidget *);
0438     static void setTabOrder(std::initializer_list<QWidget *> widgets);
0439     void setFocusProxy(QWidget *);
0440     QWidget *focusProxy() const;
0441     Qt::ContextMenuPolicy contextMenuPolicy() const;
0442     void setContextMenuPolicy(Qt::ContextMenuPolicy policy);
0443 
0444     // Grab functions
0445     void grabMouse();
0446 #ifndef QT_NO_CURSOR
0447     void grabMouse(const QCursor &);
0448 #endif
0449     void releaseMouse();
0450     void grabKeyboard();
0451     void releaseKeyboard();
0452 #ifndef QT_NO_SHORTCUT
0453     int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut);
0454     void releaseShortcut(int id);
0455     void setShortcutEnabled(int id, bool enable = true);
0456     void setShortcutAutoRepeat(int id, bool enable = true);
0457 #endif
0458     static QWidget *mouseGrabber();
0459     static QWidget *keyboardGrabber();
0460 
0461     // Update/refresh functions
0462     inline bool updatesEnabled() const;
0463     void setUpdatesEnabled(bool enable);
0464 
0465 #if QT_CONFIG(graphicsview)
0466     QGraphicsProxyWidget *graphicsProxyWidget() const;
0467 #endif
0468 
0469 public Q_SLOTS:
0470     void update();
0471     void repaint();
0472 
0473 public:
0474     inline void update(int x, int y, int w, int h);
0475     void update(const QRect&);
0476     void update(const QRegion&);
0477 
0478     void repaint(int x, int y, int w, int h);
0479     void repaint(const QRect &);
0480     void repaint(const QRegion &);
0481 
0482 public Q_SLOTS:
0483     // Widget management functions
0484 
0485     virtual void setVisible(bool visible);
0486     void setHidden(bool hidden);
0487     void show();
0488     void hide();
0489 
0490     void showMinimized();
0491     void showMaximized();
0492     void showFullScreen();
0493     void showNormal();
0494 
0495     bool close();
0496     void raise();
0497     void lower();
0498 
0499 public:
0500     void stackUnder(QWidget*);
0501     void move(int x, int y);
0502     void move(const QPoint &);
0503     void resize(int w, int h);
0504     void resize(const QSize &);
0505     inline void setGeometry(int x, int y, int w, int h);
0506     void setGeometry(const QRect &);
0507     QByteArray saveGeometry() const;
0508     bool restoreGeometry(const QByteArray &geometry);
0509     void adjustSize();
0510     bool isVisible() const;
0511     bool isVisibleTo(const QWidget *) const;
0512     inline bool isHidden() const;
0513 
0514     bool isMinimized() const;
0515     bool isMaximized() const;
0516     bool isFullScreen() const;
0517 
0518     Qt::WindowStates windowState() const;
0519     void setWindowState(Qt::WindowStates state);
0520     void overrideWindowState(Qt::WindowStates state);
0521 
0522     virtual QSize sizeHint() const;
0523     virtual QSize minimumSizeHint() const;
0524 
0525     QSizePolicy sizePolicy() const;
0526     void setSizePolicy(QSizePolicy);
0527     inline void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical);
0528     virtual int heightForWidth(int) const;
0529     virtual bool hasHeightForWidth() const;
0530 
0531     QRegion visibleRegion() const;
0532 
0533     void setContentsMargins(int left, int top, int right, int bottom);
0534     void setContentsMargins(const QMargins &margins);
0535     QMargins contentsMargins() const;
0536 
0537     QRect contentsRect() const;
0538 
0539 public:
0540     QLayout *layout() const;
0541     void setLayout(QLayout *);
0542     void updateGeometry();
0543 
0544     void setParent(QWidget *parent);
0545     void setParent(QWidget *parent, Qt::WindowFlags f);
0546 
0547     void scroll(int dx, int dy);
0548     void scroll(int dx, int dy, const QRect&);
0549 
0550     // Misc. functions
0551 
0552     QWidget *focusWidget() const;
0553     QWidget *nextInFocusChain() const;
0554     QWidget *previousInFocusChain() const;
0555 
0556     // drag and drop
0557     bool acceptDrops() const;
0558     void setAcceptDrops(bool on);
0559 
0560 #ifndef QT_NO_ACTION
0561     //actions
0562     void addAction(QAction *action);
0563     void addActions(const QList<QAction*> &actions);
0564     void insertActions(QAction *before, const QList<QAction*> &actions);
0565     void insertAction(QAction *before, QAction *action);
0566     void removeAction(QAction *action);
0567     QList<QAction*> actions() const;
0568 
0569     // convenience action factories
0570     QAction *addAction(const QString &text);
0571     QAction *addAction(const QIcon &icon, const QString &text);
0572     QAction *addAction(const QString &text, const QObject *receiver,
0573                        const char *member, Qt::ConnectionType type = Qt::AutoConnection);
0574     QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver,
0575                        const char *member, Qt::ConnectionType type = Qt::AutoConnection);
0576     template <typename...Args, typename = compatible_action_slot_args<Args...>>
0577     QAction *addAction(const QString &text, Args&&...args)
0578     {
0579         QAction *result = addAction(text);
0580         connect(result, &QAction::triggered, std::forward<Args>(args)...);
0581         return result;
0582     }
0583     template <typename...Args, typename = compatible_action_slot_args<Args...>>
0584     QAction *addAction(const QIcon &icon, const QString &text, Args&&...args)
0585     {
0586         QAction *result = addAction(icon, text);
0587         connect(result, &QAction::triggered, std::forward<Args>(args)...);
0588         return result;
0589     }
0590 
0591 #if QT_CONFIG(shortcut)
0592     QAction *addAction(const QString &text, const QKeySequence &shortcut);
0593     QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut);
0594     QAction *addAction(const QString &text, const QKeySequence &shortcut,
0595                        const QObject *receiver, const char *member,
0596                        Qt::ConnectionType type = Qt::AutoConnection);
0597     QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut,
0598                        const QObject *receiver, const char *member,
0599                        Qt::ConnectionType type = Qt::AutoConnection);
0600 
0601     template <typename...Args, typename = compatible_action_slot_args<Args...>>
0602     QAction *addAction(const QString &text, const QKeySequence &shortcut, Args&&...args)
0603     {
0604         QAction *result = addAction(text, shortcut);
0605         connect(result, &QAction::triggered, std::forward<Args>(args)...);
0606         return result;
0607     }
0608     template <typename...Args, typename = compatible_action_slot_args<Args...>>
0609     QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, Args&&...args)
0610     {
0611         QAction *result = addAction(icon, text, shortcut);
0612         connect(result, &QAction::triggered, std::forward<Args>(args)...);
0613         return result;
0614     }
0615 #endif // QT_CONFIG(shortcut)
0616 #endif // QT_NO_ACTION
0617 
0618     QWidget *parentWidget() const;
0619 
0620     void setWindowFlags(Qt::WindowFlags type);
0621     inline Qt::WindowFlags windowFlags() const;
0622     void setWindowFlag(Qt::WindowType, bool on = true);
0623     void overrideWindowFlags(Qt::WindowFlags type);
0624 
0625     inline Qt::WindowType windowType() const;
0626 
0627     static QWidget *find(WId);
0628     inline QWidget *childAt(int x, int y) const;
0629     QWidget *childAt(const QPoint &p) const;
0630     QWidget *childAt(const QPointF &p) const;
0631 
0632     void setAttribute(Qt::WidgetAttribute, bool on = true);
0633     inline bool testAttribute(Qt::WidgetAttribute) const;
0634 
0635     QPaintEngine *paintEngine() const override;
0636 
0637     void ensurePolished() const;
0638 
0639     bool isAncestorOf(const QWidget *child) const;
0640 
0641 #ifdef QT_KEYPAD_NAVIGATION
0642     bool hasEditFocus() const;
0643     void setEditFocus(bool on);
0644 #endif
0645 
0646     bool autoFillBackground() const;
0647     void setAutoFillBackground(bool enabled);
0648 
0649     QBackingStore *backingStore() const;
0650 
0651     QWindow *windowHandle() const;
0652     QScreen *screen() const;
0653     void setScreen(QScreen *);
0654 
0655     static QWidget *createWindowContainer(QWindow *window, QWidget *parent=nullptr, Qt::WindowFlags flags=Qt::WindowFlags());
0656 
0657 Q_SIGNALS:
0658     void windowTitleChanged(const QString &title);
0659     void windowIconChanged(const QIcon &icon);
0660     void windowIconTextChanged(const QString &iconText);
0661     void customContextMenuRequested(const QPoint &pos);
0662 
0663 protected:
0664     // Event handlers
0665     bool event(QEvent *event) override;
0666     virtual void mousePressEvent(QMouseEvent *event);
0667     virtual void mouseReleaseEvent(QMouseEvent *event);
0668     virtual void mouseDoubleClickEvent(QMouseEvent *event);
0669     virtual void mouseMoveEvent(QMouseEvent *event);
0670 #if QT_CONFIG(wheelevent)
0671     virtual void wheelEvent(QWheelEvent *event);
0672 #endif
0673     virtual void keyPressEvent(QKeyEvent *event);
0674     virtual void keyReleaseEvent(QKeyEvent *event);
0675     virtual void focusInEvent(QFocusEvent *event);
0676     virtual void focusOutEvent(QFocusEvent *event);
0677     virtual void enterEvent(QEnterEvent *event);
0678     virtual void leaveEvent(QEvent *event);
0679     virtual void paintEvent(QPaintEvent *event);
0680     virtual void moveEvent(QMoveEvent *event);
0681     virtual void resizeEvent(QResizeEvent *event);
0682     virtual void closeEvent(QCloseEvent *event);
0683 #ifndef QT_NO_CONTEXTMENU
0684     virtual void contextMenuEvent(QContextMenuEvent *event);
0685 #endif
0686 #if QT_CONFIG(tabletevent)
0687     virtual void tabletEvent(QTabletEvent *event);
0688 #endif
0689 #ifndef QT_NO_ACTION
0690     virtual void actionEvent(QActionEvent *event);
0691 #endif
0692 
0693 #if QT_CONFIG(draganddrop)
0694     virtual void dragEnterEvent(QDragEnterEvent *event);
0695     virtual void dragMoveEvent(QDragMoveEvent *event);
0696     virtual void dragLeaveEvent(QDragLeaveEvent *event);
0697     virtual void dropEvent(QDropEvent *event);
0698 #endif
0699 
0700     virtual void showEvent(QShowEvent *event);
0701     virtual void hideEvent(QHideEvent *event);
0702 
0703     virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result);
0704 
0705     // Misc. protected functions
0706     virtual void changeEvent(QEvent *);
0707 
0708     int metric(PaintDeviceMetric) const override;
0709     void initPainter(QPainter *painter) const override;
0710     QPaintDevice *redirected(QPoint *offset) const override;
0711     QPainter *sharedPainter() const override;
0712 
0713     virtual void inputMethodEvent(QInputMethodEvent *);
0714 public:
0715     virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
0716 
0717     Qt::InputMethodHints inputMethodHints() const;
0718     void setInputMethodHints(Qt::InputMethodHints hints);
0719 
0720 protected Q_SLOTS:
0721     void updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll);
0722 protected:
0723 
0724     void create(WId = 0, bool initializeWindow = true,
0725                          bool destroyOldWindow = true);
0726     void destroy(bool destroyWindow = true,
0727                  bool destroySubWindows = true);
0728 
0729     friend class QDataWidgetMapperPrivate; // for access to focusNextPrevChild
0730     virtual bool focusNextPrevChild(bool next);
0731     inline bool focusNextChild() { return focusNextPrevChild(true); }
0732     inline bool focusPreviousChild() { return focusNextPrevChild(false); }
0733 
0734 protected:
0735     QWidget(QWidgetPrivate &d, QWidget* parent, Qt::WindowFlags f);
0736 private:
0737     void setBackingStore(QBackingStore *store);
0738 
0739     bool testAttribute_helper(Qt::WidgetAttribute) const;
0740 
0741     QLayout *takeLayout();
0742 
0743     friend class QBackingStoreDevice;
0744     friend class QWidgetRepaintManager;
0745     friend class QApplication;
0746     friend class QApplicationPrivate;
0747     friend class QGuiApplication;
0748     friend class QGuiApplicationPrivate;
0749     friend class QBaseApplication;
0750     friend class QLabel;
0751     friend class QPainter;
0752     friend class QPainterPrivate;
0753     friend class QPixmap; // for QPixmap::fill()
0754     friend class QFontMetrics;
0755     friend class QFontInfo;
0756     friend class QLayout;
0757     friend class QWidgetItem;
0758     friend class QWidgetItemV2;
0759     friend class QX11PaintEngine;
0760     friend class QWin32PaintEngine;
0761     friend class QShortcutPrivate;
0762     friend class QWindowSurface;
0763     friend class QGraphicsProxyWidget;
0764     friend class QGraphicsProxyWidgetPrivate;
0765     friend class QStyleSheetStyle;
0766     friend struct QWidgetExceptionCleaner;
0767     friend class QWidgetWindow;
0768     friend class QAccessibleWidget;
0769     friend class QAccessibleTable;
0770     friend class QAccessibleTabButton;
0771 #ifndef QT_NO_GESTURES
0772     friend class QGestureManager;
0773     friend class QWinNativePanGestureRecognizer;
0774 #endif // QT_NO_GESTURES
0775     friend class QWidgetEffectSourcePrivate;
0776 
0777     friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);
0778     friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);
0779 
0780 private:
0781     Q_DISABLE_COPY(QWidget)
0782     Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
0783     Q_PRIVATE_SLOT(d_func(), QWindow *_q_closestWindowHandle())
0784 
0785     QWidgetData *data;
0786 };
0787 
0788 Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
0789 
0790 #ifndef Q_QDOC
0791 template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
0792 {
0793     if (!o || !o->isWidgetType()) return nullptr;
0794     return static_cast<QWidget*>(o);
0795 }
0796 template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
0797 {
0798     if (!o || !o->isWidgetType()) return nullptr;
0799     return static_cast<const QWidget*>(o);
0800 }
0801 #endif // !Q_QDOC
0802 
0803 inline QWidget *QWidget::childAt(int ax, int ay) const
0804 { return childAt(QPointF(ax, ay)); }
0805 
0806 inline Qt::WindowType QWidget::windowType() const
0807 { return static_cast<Qt::WindowType>((data->window_flags & Qt::WindowType_Mask).toInt()); }
0808 inline Qt::WindowFlags QWidget::windowFlags() const
0809 { return data->window_flags; }
0810 
0811 #if QT_DEPRECATED_SINCE(6, 1)
0812 inline bool QWidget::isTopLevel() const
0813 { return bool(windowType() & Qt::Window); }
0814 #endif
0815 
0816 inline bool QWidget::isWindow() const
0817 { return bool(windowType() & Qt::Window); }
0818 
0819 inline bool QWidget::isEnabled() const
0820 { return !testAttribute(Qt::WA_Disabled); }
0821 
0822 inline bool QWidget::isModal() const
0823 { return data->window_modality != Qt::NonModal; }
0824 
0825 inline int QWidget::minimumWidth() const
0826 { return minimumSize().width(); }
0827 
0828 inline int QWidget::minimumHeight() const
0829 { return minimumSize().height(); }
0830 
0831 inline int QWidget::maximumWidth() const
0832 { return maximumSize().width(); }
0833 
0834 inline int QWidget::maximumHeight() const
0835 { return maximumSize().height(); }
0836 
0837 inline void QWidget::setMinimumSize(const QSize &s)
0838 { setMinimumSize(s.width(),s.height()); }
0839 
0840 inline void QWidget::setMaximumSize(const QSize &s)
0841 { setMaximumSize(s.width(),s.height()); }
0842 
0843 inline void QWidget::setSizeIncrement(const QSize &s)
0844 { setSizeIncrement(s.width(),s.height()); }
0845 
0846 inline void QWidget::setBaseSize(const QSize &s)
0847 { setBaseSize(s.width(),s.height()); }
0848 
0849 inline const QFont &QWidget::font() const
0850 { return data->fnt; }
0851 
0852 inline QFontMetrics QWidget::fontMetrics() const
0853 { return QFontMetrics(data->fnt); }
0854 
0855 inline QFontInfo QWidget::fontInfo() const
0856 { return QFontInfo(data->fnt); }
0857 
0858 inline void QWidget::setMouseTracking(bool enable)
0859 { setAttribute(Qt::WA_MouseTracking, enable); }
0860 
0861 inline bool QWidget::hasMouseTracking() const
0862 { return testAttribute(Qt::WA_MouseTracking); }
0863 
0864 inline bool QWidget::underMouse() const
0865 { return testAttribute(Qt::WA_UnderMouse); }
0866 
0867 inline void QWidget::setTabletTracking(bool enable)
0868 { setAttribute(Qt::WA_TabletTracking, enable); }
0869 
0870 inline bool QWidget::hasTabletTracking() const
0871 { return testAttribute(Qt::WA_TabletTracking); }
0872 
0873 inline bool QWidget::updatesEnabled() const
0874 { return !testAttribute(Qt::WA_UpdatesDisabled); }
0875 
0876 inline void QWidget::update(int ax, int ay, int aw, int ah)
0877 { update(QRect(ax, ay, aw, ah)); }
0878 
0879 inline bool QWidget::isVisible() const
0880 { return testAttribute(Qt::WA_WState_Visible); }
0881 
0882 inline bool QWidget::isHidden() const
0883 { return testAttribute(Qt::WA_WState_Hidden); }
0884 
0885 inline void QWidget::move(int ax, int ay)
0886 { move(QPoint(ax, ay)); }
0887 
0888 inline void QWidget::resize(int w, int h)
0889 { resize(QSize(w, h)); }
0890 
0891 inline void QWidget::setGeometry(int ax, int ay, int aw, int ah)
0892 { setGeometry(QRect(ax, ay, aw, ah)); }
0893 
0894 inline QRect QWidget::rect() const
0895 { return QRect(0,0,data->crect.width(),data->crect.height()); }
0896 
0897 inline const QRect &QWidget::geometry() const
0898 { return data->crect; }
0899 
0900 inline QSize QWidget::size() const
0901 { return data->crect.size(); }
0902 
0903 inline int QWidget::width() const
0904 { return data->crect.width(); }
0905 
0906 inline int QWidget::height() const
0907 { return data->crect.height(); }
0908 
0909 inline QWidget *QWidget::parentWidget() const
0910 { return static_cast<QWidget *>(QObject::parent()); }
0911 
0912 inline void QWidget::setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver)
0913 { setSizePolicy(QSizePolicy(hor, ver)); }
0914 
0915 inline bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
0916 {
0917     if (attribute < int(8*sizeof(uint)))
0918         return data->widget_attributes & (1<<attribute);
0919     return testAttribute_helper(attribute);
0920 }
0921 
0922 #define QWIDGETSIZE_MAX ((1<<24)-1)
0923 
0924 #ifndef QT_NO_DEBUG_STREAM
0925 Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QWidget *);
0926 #endif
0927 
0928 QT_END_NAMESPACE
0929 
0930 #endif // QWIDGET_H