Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-13 09:08:13

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 
0004 #ifndef QWIDGET_H
0005 #define QWIDGET_H
0006 
0007 #include <QtWidgets/qtwidgetsglobal.h>
0008 #include <QtGui/qwindowdefs.h>
0009 #include <QtCore/qobject.h>
0010 #include <QtCore/qmargins.h>
0011 #if QT_CONFIG(action)
0012 #include <QtGui/qaction.h>
0013 #endif
0014 #include <QtGui/qpaintdevice.h>
0015 #include <QtGui/qpalette.h>
0016 #include <QtGui/qfont.h>
0017 #include <QtGui/qfontmetrics.h>
0018 #include <QtGui/qfontinfo.h>
0019 #include <QtWidgets/qsizepolicy.h>
0020 #include <QtGui/qregion.h>
0021 #include <QtGui/qbrush.h>
0022 #include <QtGui/qcursor.h>
0023 #if QT_CONFIG(shortcut)
0024 #  include <QtGui/qkeysequence.h>
0025 #endif
0026 
0027 #ifdef QT_INCLUDE_COMPAT
0028 #include <QtGui/qevent.h>
0029 #endif
0030 
0031 QT_BEGIN_NAMESPACE
0032 
0033 
0034 class QLayout;
0035 class QStyle;
0036 class QAction;
0037 class QVariant;
0038 class QWindow;
0039 class QActionEvent;
0040 class QMouseEvent;
0041 class QWheelEvent;
0042 class QHoverEvent;
0043 class QKeyEvent;
0044 class QEnterEvent;
0045 class QFocusEvent;
0046 class QPaintEvent;
0047 class QMoveEvent;
0048 class QResizeEvent;
0049 class QCloseEvent;
0050 class QContextMenuEvent;
0051 class QInputMethodEvent;
0052 class QTabletEvent;
0053 class QDragEnterEvent;
0054 class QDragMoveEvent;
0055 class QDragLeaveEvent;
0056 class QDropEvent;
0057 class QScreen;
0058 class QShowEvent;
0059 class QHideEvent;
0060 class QIcon;
0061 class QBackingStore;
0062 class QPlatformWindow;
0063 class QLocale;
0064 class QGraphicsProxyWidget;
0065 class QGraphicsEffect;
0066 class QRasterWindowSurface;
0067 class QUnifiedToolbarSurface;
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 QPainter;
0751     friend class QPainterPrivate;
0752     friend class QPixmap; // for QPixmap::fill()
0753     friend class QFontMetrics;
0754     friend class QFontInfo;
0755     friend class QLayout;
0756     friend class QWidgetItem;
0757     friend class QWidgetItemV2;
0758     friend class QX11PaintEngine;
0759     friend class QWin32PaintEngine;
0760     friend class QShortcutPrivate;
0761     friend class QWindowSurface;
0762     friend class QGraphicsProxyWidget;
0763     friend class QGraphicsProxyWidgetPrivate;
0764     friend class QStyleSheetStyle;
0765     friend struct QWidgetExceptionCleaner;
0766     friend class QWidgetWindow;
0767     friend class QAccessibleWidget;
0768     friend class QAccessibleTable;
0769     friend class QAccessibleTabButton;
0770 #ifndef QT_NO_GESTURES
0771     friend class QGestureManager;
0772     friend class QWinNativePanGestureRecognizer;
0773 #endif // QT_NO_GESTURES
0774     friend class QWidgetEffectSourcePrivate;
0775 
0776     friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);
0777     friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);
0778 
0779 private:
0780     Q_DISABLE_COPY(QWidget)
0781     Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
0782     Q_PRIVATE_SLOT(d_func(), QWindow *_q_closestWindowHandle())
0783 
0784     QWidgetData *data;
0785 };
0786 
0787 Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
0788 
0789 #ifndef Q_QDOC
0790 template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
0791 {
0792     if (!o || !o->isWidgetType()) return nullptr;
0793     return static_cast<QWidget*>(o);
0794 }
0795 template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
0796 {
0797     if (!o || !o->isWidgetType()) return nullptr;
0798     return static_cast<const QWidget*>(o);
0799 }
0800 #endif // !Q_QDOC
0801 
0802 inline QWidget *QWidget::childAt(int ax, int ay) const
0803 { return childAt(QPointF(ax, ay)); }
0804 
0805 inline Qt::WindowType QWidget::windowType() const
0806 { return static_cast<Qt::WindowType>((data->window_flags & Qt::WindowType_Mask).toInt()); }
0807 inline Qt::WindowFlags QWidget::windowFlags() const
0808 { return data->window_flags; }
0809 
0810 #if QT_DEPRECATED_SINCE(6, 1)
0811 inline bool QWidget::isTopLevel() const
0812 { return bool(windowType() & Qt::Window); }
0813 #endif
0814 
0815 inline bool QWidget::isWindow() const
0816 { return bool(windowType() & Qt::Window); }
0817 
0818 inline bool QWidget::isEnabled() const
0819 { return !testAttribute(Qt::WA_Disabled); }
0820 
0821 inline bool QWidget::isModal() const
0822 { return data->window_modality != Qt::NonModal; }
0823 
0824 inline int QWidget::minimumWidth() const
0825 { return minimumSize().width(); }
0826 
0827 inline int QWidget::minimumHeight() const
0828 { return minimumSize().height(); }
0829 
0830 inline int QWidget::maximumWidth() const
0831 { return maximumSize().width(); }
0832 
0833 inline int QWidget::maximumHeight() const
0834 { return maximumSize().height(); }
0835 
0836 inline void QWidget::setMinimumSize(const QSize &s)
0837 { setMinimumSize(s.width(),s.height()); }
0838 
0839 inline void QWidget::setMaximumSize(const QSize &s)
0840 { setMaximumSize(s.width(),s.height()); }
0841 
0842 inline void QWidget::setSizeIncrement(const QSize &s)
0843 { setSizeIncrement(s.width(),s.height()); }
0844 
0845 inline void QWidget::setBaseSize(const QSize &s)
0846 { setBaseSize(s.width(),s.height()); }
0847 
0848 inline const QFont &QWidget::font() const
0849 { return data->fnt; }
0850 
0851 inline QFontMetrics QWidget::fontMetrics() const
0852 { return QFontMetrics(data->fnt); }
0853 
0854 inline QFontInfo QWidget::fontInfo() const
0855 { return QFontInfo(data->fnt); }
0856 
0857 inline void QWidget::setMouseTracking(bool enable)
0858 { setAttribute(Qt::WA_MouseTracking, enable); }
0859 
0860 inline bool QWidget::hasMouseTracking() const
0861 { return testAttribute(Qt::WA_MouseTracking); }
0862 
0863 inline bool QWidget::underMouse() const
0864 { return testAttribute(Qt::WA_UnderMouse); }
0865 
0866 inline void QWidget::setTabletTracking(bool enable)
0867 { setAttribute(Qt::WA_TabletTracking, enable); }
0868 
0869 inline bool QWidget::hasTabletTracking() const
0870 { return testAttribute(Qt::WA_TabletTracking); }
0871 
0872 inline bool QWidget::updatesEnabled() const
0873 { return !testAttribute(Qt::WA_UpdatesDisabled); }
0874 
0875 inline void QWidget::update(int ax, int ay, int aw, int ah)
0876 { update(QRect(ax, ay, aw, ah)); }
0877 
0878 inline bool QWidget::isVisible() const
0879 { return testAttribute(Qt::WA_WState_Visible); }
0880 
0881 inline bool QWidget::isHidden() const
0882 { return testAttribute(Qt::WA_WState_Hidden); }
0883 
0884 inline void QWidget::move(int ax, int ay)
0885 { move(QPoint(ax, ay)); }
0886 
0887 inline void QWidget::resize(int w, int h)
0888 { resize(QSize(w, h)); }
0889 
0890 inline void QWidget::setGeometry(int ax, int ay, int aw, int ah)
0891 { setGeometry(QRect(ax, ay, aw, ah)); }
0892 
0893 inline QRect QWidget::rect() const
0894 { return QRect(0,0,data->crect.width(),data->crect.height()); }
0895 
0896 inline const QRect &QWidget::geometry() const
0897 { return data->crect; }
0898 
0899 inline QSize QWidget::size() const
0900 { return data->crect.size(); }
0901 
0902 inline int QWidget::width() const
0903 { return data->crect.width(); }
0904 
0905 inline int QWidget::height() const
0906 { return data->crect.height(); }
0907 
0908 inline QWidget *QWidget::parentWidget() const
0909 { return static_cast<QWidget *>(QObject::parent()); }
0910 
0911 inline void QWidget::setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver)
0912 { setSizePolicy(QSizePolicy(hor, ver)); }
0913 
0914 inline bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
0915 {
0916     if (attribute < int(8*sizeof(uint)))
0917         return data->widget_attributes & (1<<attribute);
0918     return testAttribute_helper(attribute);
0919 }
0920 
0921 #define QWIDGETSIZE_MAX ((1<<24)-1)
0922 
0923 #ifndef QT_NO_DEBUG_STREAM
0924 Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QWidget *);
0925 #endif
0926 
0927 QT_END_NAMESPACE
0928 
0929 #endif // QWIDGET_H