summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qwidget.h
blob: 02f328d2956a81a6e81809b2b04bb31f9d7d05f9 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QWIDGET_H#define QWIDGET_H#include <QtWidgets/qtwidgetsglobal.h>#include <QtGui/qwindowdefs.h>#include <QtCore/qobject.h>#include <QtCore/qmargins.h>#if QT_CONFIG(action)#include <QtGui/qaction.h>#endif#include <QtGui/qpaintdevice.h>#include <QtGui/qpalette.h>#include <QtGui/qfont.h>#include <QtGui/qfontmetrics.h>#include <QtGui/qfontinfo.h>#include <QtWidgets/qsizepolicy.h>#include <QtGui/qregion.h>#include <QtGui/qbrush.h>#include <QtGui/qcursor.h>#if QT_CONFIG(shortcut)# include <QtGui/qkeysequence.h>#endif#ifdef QT_INCLUDE_COMPAT#include <QtGui/qevent.h>#endif QT_BEGIN_NAMESPACE class QLayout;class QStyle;class QAction;class QVariant;class QWindow;class QActionEvent;class QMouseEvent;class QWheelEvent;class QHoverEvent;class QKeyEvent;class QEnterEvent;class QFocusEvent;class QPaintEvent;class QMoveEvent;class QResizeEvent;class QCloseEvent;class QContextMenuEvent;class QInputMethodEvent;class QTabletEvent;class QDragEnterEvent;class QDragMoveEvent;class QDragLeaveEvent;class QDropEvent;class QScreen;class QShowEvent;class QHideEvent;class QIcon;class QBackingStore;class QPlatformWindow;class QLocale;class QGraphicsProxyWidget;class QGraphicsEffect;class QRasterWindowSurface;class QPixmap;#ifndef QT_NO_DEBUG_STREAMclass QDebug;#endifclass QWidgetData {public: WId winid; uint widget_attributes;Qt::WindowFlags window_flags; uint window_state :4; uint focus_policy :4; uint sizehint_forced :1; uint is_closing :1; uint in_show :1; uint in_set_window_state :1;mutable uint fstrut_dirty :1; uint context_menu_policy :3; uint window_modality :2; uint in_destructor :1; uint unused :13; QRect crect;mutable QPalette pal; QFont fnt; QRect wrect;};class QWidgetPrivate;class Q_WIDGETS_EXPORT QWidget :public QObject,public QPaintDevice { Q_OBJECT Q_DECLARE_PRIVATE(QWidget)Q_PROPERTY(bool modal READ isModal)Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)Q_PROPERTY(QRect frameGeometry READ frameGeometry)Q_PROPERTY(QRect normalGeometry READ normalGeometry)Q_PROPERTY(int x READ x)Q_PROPERTY(int y READ y)Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)Q_PROPERTY(QSize frameSize READ frameSize)Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)Q_PROPERTY(int width READ width)Q_PROPERTY(int height READ height)Q_PROPERTY(QRect rect READ rect)Q_PROPERTY(QRect childrenRect READ childrenRect)Q_PROPERTY(QRegion childrenRegion READ childrenRegion)Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false)Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false)Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false)Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false)Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)Q_PROPERTY(QPalette palette READ palette WRITE setPalette)Q_PROPERTY(QFont font READ font WRITE setFont)#ifndef QT_NO_CURSORQ_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)#endifQ_PROPERTY(bool mouseTracking READ hasMouseTracking WRITE setMouseTracking)Q_PROPERTY(bool tabletTracking READ hasTabletTracking WRITE setTabletTracking)Q_PROPERTY(bool isActiveWindow READ isActiveWindow)Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)Q_PROPERTY(bool focus READ hasFocus)Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)Q_PROPERTY(bool minimized READ isMinimized)Q_PROPERTY(bool maximized READ isMaximized)Q_PROPERTY(bool fullScreen READ isFullScreen)Q_PROPERTY(QSize sizeHint READ sizeHint)Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle NOTIFY windowTitleChanged)Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon NOTIFY windowIconChanged)Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText NOTIFY windowIconTextChanged)// deprecatedQ_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity)Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified)#if QT_CONFIG(tooltip)Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)Q_PROPERTY(int toolTipDuration READ toolTipDuration WRITE setToolTipDuration)#endif#if QT_CONFIG(statustip)Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)#endif#if QT_CONFIG(whatsthis)Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis)#endif#if QT_CONFIG(accessibility)Q_PROPERTY(QString accessibleName READ accessibleName WRITE setAccessibleName)Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription)Q_PROPERTY(QString accessibleIdentifier READ accessibleIdentifier WRITE setAccessibleIdentifier)#endifQ_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)QDOC_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)#ifndef QT_NO_STYLE_STYLESHEETQ_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)#endifQ_PROPERTY(QLocale locale READ locale WRITE setLocale RESET unsetLocale)Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath)Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)#if QT_CONFIG(action)#if 0// ### TODO: make this work (requires SFINAE-friendly connect())template<typename...Args>using compatible_action_slot_args =std::void_t<decltype(QObject::connect(std::declval<QAction*>(), &QAction::triggered,std::declval<Args>()...))>;#else// good-enough compromise for nowtemplate<typename...Args>using compatible_action_slot_args =std::enable_if_t<std::conjunction_v<#if QT_CONFIG(shortcut)std::disjunction<std::is_same<Args,Qt::ConnectionType>,std::negation<std::is_convertible<Args, QKeySequence>>>...,#endifstd::negation<std::is_convertible<Args, QIcon>>...,std::negation<std::is_convertible<Args,const char*>>...,std::negation<std::is_convertible<Args, QString>>...>>;#endif#endif// QT_CONFIG(action)public:enum RenderFlag { DrawWindowBackground =0x1, DrawChildren =0x2, IgnoreMask =0x4};Q_DECLARE_FLAGS(RenderFlags, RenderFlag)explicitQWidget(QWidget* parent =nullptr,Qt::WindowFlags f =Qt::WindowFlags());~QWidget();intdevType()const override; WId winId()const;voidcreateWinId();// internal, going awayinline WId internalWinId()const{return data->winid; } WId effectiveWinId()const;// GUI style setting QStyle *style()const;voidsetStyle(QStyle *);// Widget types and states#if QT_DEPRECATED_SINCE(6, 1)QT_DEPRECATED_VERSION_X_6_1("Use isWindow()")boolisTopLevel()const;#endifboolisWindow()const;boolisModal()const;Qt::WindowModality windowModality()const;voidsetWindowModality(Qt::WindowModality windowModality);boolisEnabled()const;boolisEnabledTo(const QWidget *)const;public Q_SLOTS:voidsetEnabled(bool);voidsetDisabled(bool);voidsetWindowModified(bool);// Widget coordinatespublic: QRect frameGeometry()const;const QRect &geometry()const; QRect normalGeometry()const;intx()const;inty()const; QPoint pos()const; QSize frameSize()const; QSize size()const;inlineintwidth()const;inlineintheight()const;inline QRect rect()const; QRect childrenRect()const; QRegion childrenRegion()const; QSize minimumSize()const; QSize maximumSize()const;intminimumWidth()const;intminimumHeight()const;intmaximumWidth()const;intmaximumHeight()const;voidsetMinimumSize(const QSize &);voidsetMinimumSize(int minw,int minh);voidsetMaximumSize(const QSize &);voidsetMaximumSize(int maxw,int maxh);voidsetMinimumWidth(int minw);voidsetMinimumHeight(int minh);voidsetMaximumWidth(int maxw);voidsetMaximumHeight(int maxh);#ifdef Q_QDOCvoidsetupUi(QWidget *widget);#endif QSize sizeIncrement()const;voidsetSizeIncrement(const QSize &);voidsetSizeIncrement(int w,int h); QSize baseSize()const;voidsetBaseSize(const QSize &);voidsetBaseSize(int basew,int baseh);voidsetFixedSize(const QSize &);voidsetFixedSize(int w,int h);voidsetFixedWidth(int w);voidsetFixedHeight(int h);// Widget coordinate mapping QPointF mapToGlobal(const QPointF &)const; QPoint mapToGlobal(const QPoint &)const; QPointF mapFromGlobal(const QPointF &)const; QPoint mapFromGlobal(const QPoint &)const; QPointF mapToParent(const QPointF &)const; QPoint mapToParent(const QPoint &)const; QPointF mapFromParent(const QPointF &)const; QPoint mapFromParent(const QPoint &)const; QPointF mapTo(const QWidget *,const QPointF &)const; QPoint mapTo(const QWidget *,const QPoint &)const; QPointF mapFrom(const QWidget *,const QPointF &)const; QPoint mapFrom(const QWidget *,const QPoint &)const; QWidget *window()const; QWidget *nativeParentWidget()const;inline QWidget *topLevelWidget()const{returnwindow(); }// Widget appearance functionsconst QPalette &palette()const;voidsetPalette(const QPalette &);voidsetBackgroundRole(QPalette::ColorRole);QPalette::ColorRole backgroundRole()const;voidsetForegroundRole(QPalette::ColorRole);QPalette::ColorRole foregroundRole()const;const QFont &font()const;voidsetFont(const QFont &); QFontMetrics fontMetrics()const; QFontInfo fontInfo()const;#ifndef QT_NO_CURSOR QCursor cursor()const;voidsetCursor(const QCursor &);voidunsetCursor();#endifvoidsetMouseTracking(bool enable);boolhasMouseTracking()const;boolunderMouse()const;voidsetTabletTracking(bool enable);boolhasTabletTracking()const;voidsetMask(const QBitmap &);voidsetMask(const QRegion &); QRegion mask()const;voidclearMask();voidrender(QPaintDevice *target,const QPoint &targetOffset =QPoint(),const QRegion &sourceRegion =QRegion(), RenderFlags renderFlags =RenderFlags(DrawWindowBackground | DrawChildren));voidrender(QPainter *painter,const QPoint &targetOffset =QPoint(),const QRegion &sourceRegion =QRegion(), RenderFlags renderFlags =RenderFlags(DrawWindowBackground | DrawChildren)); Q_INVOKABLE QPixmap grab(const QRect &rectangle =QRect(QPoint(0,0),QSize(-1, -1)));#if QT_CONFIG(graphicseffect) QGraphicsEffect *graphicsEffect()const;voidsetGraphicsEffect(QGraphicsEffect *effect);#endif// QT_CONFIG(graphicseffect)#ifndef QT_NO_GESTURESvoidgrabGesture(Qt::GestureType type,Qt::GestureFlags flags =Qt::GestureFlags());voidungrabGesture(Qt::GestureType type);#endifpublic Q_SLOTS:voidsetWindowTitle(const QString &);#ifndef QT_NO_STYLE_STYLESHEETvoidsetStyleSheet(const QString& styleSheet);#endifpublic:#ifndef QT_NO_STYLE_STYLESHEET QString styleSheet()const;#endif QString windowTitle()const;voidsetWindowIcon(const QIcon &icon); QIcon windowIcon()const;voidsetWindowIconText(const QString &); QString windowIconText()const;voidsetWindowRole(const QString &); QString windowRole()const;voidsetWindowFilePath(const QString &filePath); QString windowFilePath()const;voidsetWindowOpacity(qreal level); qreal windowOpacity()const;boolisWindowModified()const;#if QT_CONFIG(tooltip)voidsetToolTip(const QString &); QString toolTip()const;voidsetToolTipDuration(int msec);inttoolTipDuration()const;#endif#if QT_CONFIG(statustip)voidsetStatusTip(const QString &); QString statusTip()const;#endif#if QT_CONFIG(whatsthis)voidsetWhatsThis(const QString &); QString whatsThis()const;#endif#if QT_CONFIG(accessibility) QString accessibleName()const;voidsetAccessibleName(const QString &name); QString accessibleDescription()const;voidsetAccessibleDescription(const QString &description); QString accessibleIdentifier()const;voidsetAccessibleIdentifier(const QString &identifier);#endifvoidsetLayoutDirection(Qt::LayoutDirection direction);Qt::LayoutDirection layoutDirection()const;voidunsetLayoutDirection();voidsetLocale(const QLocale &locale); QLocale locale()const;voidunsetLocale();inlineboolisRightToLeft()const{returnlayoutDirection() ==Qt::RightToLeft; }inlineboolisLeftToRight()const{returnlayoutDirection() ==Qt::LeftToRight; }public Q_SLOTS:inlinevoidsetFocus() {setFocus(Qt::OtherFocusReason); }public:boolisActiveWindow()const;voidactivateWindow();voidclearFocus();voidsetFocus(Qt::FocusReason reason);Qt::FocusPolicy focusPolicy()const;voidsetFocusPolicy(Qt::FocusPolicy policy);boolhasFocus()const;static voidsetTabOrder(QWidget *, QWidget *);static voidsetTabOrder(std::initializer_list<QWidget *> widgets);voidsetFocusProxy(QWidget *); QWidget *focusProxy()const;Qt::ContextMenuPolicy contextMenuPolicy()const;voidsetContextMenuPolicy(Qt::ContextMenuPolicy policy);// Grab functionsvoidgrabMouse();#ifndef QT_NO_CURSORvoidgrabMouse(const QCursor &);#endifvoidreleaseMouse();voidgrabKeyboard();voidreleaseKeyboard();#ifndef QT_NO_SHORTCUTintgrabShortcut(const QKeySequence &key,Qt::ShortcutContext context =Qt::WindowShortcut);voidreleaseShortcut(int id);voidsetShortcutEnabled(int id,bool enable =true);voidsetShortcutAutoRepeat(int id,bool enable =true);#endifstatic QWidget *mouseGrabber();static QWidget *keyboardGrabber();// Update/refresh functionsinlineboolupdatesEnabled()const;voidsetUpdatesEnabled(bool enable);#if QT_CONFIG(graphicsview) QGraphicsProxyWidget *graphicsProxyWidget()const;#endifpublic Q_SLOTS:voidupdate();voidrepaint();public:inlinevoidupdate(int x,int y,int w,int h);voidupdate(const QRect&);voidupdate(const QRegion&);voidrepaint(int x,int y,int w,int h);voidrepaint(const QRect &);voidrepaint(const QRegion &);public Q_SLOTS:// Widget management functionsvirtualvoidsetVisible(bool visible);voidsetHidden(bool hidden);voidshow();voidhide();voidshowMinimized();voidshowMaximized();voidshowFullScreen();voidshowNormal();boolclose();voidraise();voidlower();public:voidstackUnder(QWidget*);voidmove(int x,int y);voidmove(const QPoint &);voidresize(int w,int h);voidresize(const QSize &);inlinevoidsetGeometry(int x,int y,int w,int h);voidsetGeometry(const QRect &); QByteArray saveGeometry()const;boolrestoreGeometry(const QByteArray &geometry);voidadjustSize();boolisVisible()const;boolisVisibleTo(const QWidget *)const;inlineboolisHidden()const;boolisMinimized()const;boolisMaximized()const;boolisFullScreen()const;Qt::WindowStates windowState()const;voidsetWindowState(Qt::WindowStates state);voidoverrideWindowState(Qt::WindowStates state);virtual QSize sizeHint()const;virtual QSize minimumSizeHint()const; QSizePolicy sizePolicy()const;voidsetSizePolicy(QSizePolicy);inlinevoidsetSizePolicy(QSizePolicy::Policy horizontal,QSizePolicy::Policy vertical);virtualintheightForWidth(int)const;virtualboolhasHeightForWidth()const; QRegion visibleRegion()const;voidsetContentsMargins(int left,int top,int right,int bottom);voidsetContentsMargins(const QMargins &margins); QMargins contentsMargins()const; QRect contentsRect()const;public: QLayout *layout()const;voidsetLayout(QLayout *);voidupdateGeometry();voidsetParent(QWidget *parent);voidsetParent(QWidget *parent,Qt::WindowFlags f);voidscroll(int dx,int dy);voidscroll(int dx,int dy,const QRect&);// Misc. functions QWidget *focusWidget()const; QWidget *nextInFocusChain()const; QWidget *previousInFocusChain()const;// drag and dropboolacceptDrops()const;voidsetAcceptDrops(bool on);#ifndef QT_NO_ACTION//actionsvoidaddAction(QAction *action);voidaddActions(const QList<QAction*> &actions);voidinsertActions(QAction *before,const QList<QAction*> &actions);voidinsertAction(QAction *before, QAction *action);voidremoveAction(QAction *action); QList<QAction*>actions()const;// convenience action factories QAction *addAction(const QString &text); QAction *addAction(const QIcon &icon,const QString &text); QAction *addAction(const QString &text,const QObject *receiver,const char*member,Qt::ConnectionType type =Qt::AutoConnection); QAction *addAction(const QIcon &icon,const QString &text,const QObject *receiver,const char*member,Qt::ConnectionType type =Qt::AutoConnection);template<typename...Args, typename = compatible_action_slot_args<Args...>> QAction *addAction(const QString &text, Args&&...args){ QAction *result =addAction(text);connect(result, &QAction::triggered,std::forward<Args>(args)...);return result;}template<typename...Args, typename = compatible_action_slot_args<Args...>> QAction *addAction(const QIcon &icon,const QString &text, Args&&...args){ QAction *result =addAction(icon, text);connect(result, &QAction::triggered,std::forward<Args>(args)...);return result;}#if QT_CONFIG(shortcut) QAction *addAction(const QString &text,const QKeySequence &shortcut); QAction *addAction(const QIcon &icon,const QString &text,const QKeySequence &shortcut); QAction *addAction(const QString &text,const QKeySequence &shortcut,const QObject *receiver,const char*member,Qt::ConnectionType type =Qt::AutoConnection); QAction *addAction(const QIcon &icon,const QString &text,const QKeySequence &shortcut,const QObject *receiver,const char*member,Qt::ConnectionType type =Qt::AutoConnection);template<typename...Args, typename = compatible_action_slot_args<Args...>> QAction *addAction(const QString &text,const QKeySequence &shortcut, Args&&...args){ QAction *result =addAction(text, shortcut);connect(result, &QAction::triggered,std::forward<Args>(args)...);return result;}template<typename...Args, typename = compatible_action_slot_args<Args...>> QAction *addAction(const QIcon &icon,const QString &text,const QKeySequence &shortcut, Args&&...args){ QAction *result =addAction(icon, text, shortcut);connect(result, &QAction::triggered,std::forward<Args>(args)...);return result;}#endif// QT_CONFIG(shortcut)#endif// QT_NO_ACTION QWidget *parentWidget()const;voidsetWindowFlags(Qt::WindowFlags type);inline Qt::WindowFlags windowFlags()const;voidsetWindowFlag(Qt::WindowType,bool on =true);voidoverrideWindowFlags(Qt::WindowFlags type);inline Qt::WindowType windowType()const;static QWidget *find(WId);inline QWidget *childAt(int x,int y)const; QWidget *childAt(const QPoint &p)const; QWidget *childAt(const QPointF &p)const;voidsetAttribute(Qt::WidgetAttribute,bool on =true);inlinebooltestAttribute(Qt::WidgetAttribute)const; QPaintEngine *paintEngine()const override;voidensurePolished()const;boolisAncestorOf(const QWidget *child)const;#ifdef QT_KEYPAD_NAVIGATIONboolhasEditFocus()const;voidsetEditFocus(bool on);#endifboolautoFillBackground()const;voidsetAutoFillBackground(bool enabled); QBackingStore *backingStore()const; QWindow *windowHandle()const; QScreen *screen()const;voidsetScreen(QScreen *);static QWidget *createWindowContainer(QWindow *window, QWidget *parent=nullptr,Qt::WindowFlags flags=Qt::WindowFlags()); Q_SIGNALS:voidwindowTitleChanged(const QString &title);voidwindowIconChanged(const QIcon &icon);voidwindowIconTextChanged(const QString &iconText);voidcustomContextMenuRequested(const QPoint &pos);protected:// Event handlersboolevent(QEvent *event) override;virtualvoidmousePressEvent(QMouseEvent *event);virtualvoidmouseReleaseEvent(QMouseEvent *event);virtualvoidmouseDoubleClickEvent(QMouseEvent *event);virtualvoidmouseMoveEvent(QMouseEvent *event);#if QT_CONFIG(wheelevent)virtualvoidwheelEvent(QWheelEvent *event);#endifvirtualvoidkeyPressEvent(QKeyEvent *event);virtualvoidkeyReleaseEvent(QKeyEvent *event);virtualvoidfocusInEvent(QFocusEvent *event);virtualvoidfocusOutEvent(QFocusEvent *event);virtualvoidenterEvent(QEnterEvent *event);virtualvoidleaveEvent(QEvent *event);virtualvoidpaintEvent(QPaintEvent *event);virtualvoidmoveEvent(QMoveEvent *event);virtualvoidresizeEvent(QResizeEvent *event);virtualvoidcloseEvent(QCloseEvent *event);#ifndef QT_NO_CONTEXTMENUvirtualvoidcontextMenuEvent(QContextMenuEvent *event);#endif#if QT_CONFIG(tabletevent)virtualvoidtabletEvent(QTabletEvent *event);#endif#ifndef QT_NO_ACTIONvirtualvoidactionEvent(QActionEvent *event);#endif#if QT_CONFIG(draganddrop)virtualvoiddragEnterEvent(QDragEnterEvent *event);virtualvoiddragMoveEvent(QDragMoveEvent *event);virtualvoiddragLeaveEvent(QDragLeaveEvent *event);virtualvoiddropEvent(QDropEvent *event);#endifvirtualvoidshowEvent(QShowEvent *event);virtualvoidhideEvent(QHideEvent *event);virtualboolnativeEvent(const QByteArray &eventType,void*message, qintptr *result);// Misc. protected functionsvirtualvoidchangeEvent(QEvent *);intmetric(PaintDeviceMetric)const override;voidinitPainter(QPainter *painter)const override; QPaintDevice *redirected(QPoint *offset)const override; QPainter *sharedPainter()const override;virtualvoidinputMethodEvent(QInputMethodEvent *);public:virtual QVariant inputMethodQuery(Qt::InputMethodQuery)const;Qt::InputMethodHints inputMethodHints()const;voidsetInputMethodHints(Qt::InputMethodHints hints);protected Q_SLOTS:voidupdateMicroFocus(Qt::InputMethodQuery query =Qt::ImQueryAll);protected:voidcreate(WId =0,bool initializeWindow =true,bool destroyOldWindow =true);voiddestroy(bool destroyWindow =true,bool destroySubWindows =true);friend class QDataWidgetMapperPrivate;// for access to focusNextPrevChildvirtualboolfocusNextPrevChild(bool next);inlineboolfocusNextChild() {returnfocusNextPrevChild(true); }inlineboolfocusPreviousChild() {returnfocusNextPrevChild(false); }protected:QWidget(QWidgetPrivate &d, QWidget* parent,Qt::WindowFlags f);private:voidsetBackingStore(QBackingStore *store);booltestAttribute_helper(Qt::WidgetAttribute)const; QLayout *takeLayout();friend class QBackingStoreDevice;friend class QWidgetRepaintManager;friend class QApplication;friend class QApplicationPrivate;friend class QGuiApplication;friend class QGuiApplicationPrivate;friend class QBaseApplication;friend class QPainter;friend class QPainterPrivate;friend class QPixmap;// for QPixmap::fill()friend class QFontMetrics;friend class QFontInfo;friend class QLayout;friend class QWidgetItem;friend class QWidgetItemV2;friend class QX11PaintEngine;friend class QWin32PaintEngine;friend class QShortcutPrivate;friend class QWindowSurface;friend class QGraphicsProxyWidget;friend class QGraphicsProxyWidgetPrivate;friend class QStyleSheetStyle;friendstruct QWidgetExceptionCleaner;friend class QWidgetWindow;friend class QAccessibleWidget;friend class QAccessibleTable;friend class QAccessibleTabButton;#ifndef QT_NO_GESTURESfriend class QGestureManager;friend class QWinNativePanGestureRecognizer;#endif// QT_NO_GESTURESfriend class QWidgetEffectSourcePrivate;friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);private:Q_DISABLE_COPY(QWidget)Q_PRIVATE_SLOT(d_func(),void_q_showIfNotHidden())Q_PRIVATE_SLOT(d_func(), QWindow *_q_closestWindowHandle()) QWidgetData *data;};Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)#ifndef Q_QDOCtemplate<>inline QWidget *qobject_cast<QWidget*>(QObject *o){if(!o || !o->isWidgetType())returnnullptr;return static_cast<QWidget*>(o);}template<>inlineconst QWidget *qobject_cast<const QWidget*>(const QObject *o){if(!o || !o->isWidgetType())returnnullptr;return static_cast<const QWidget*>(o);}#endif// !Q_QDOCinline QWidget *QWidget::childAt(int ax,int ay)const{returnchildAt(QPointF(ax, ay)); }inline Qt::WindowType QWidget::windowType()const{return static_cast<Qt::WindowType>((data->window_flags &Qt::WindowType_Mask).toInt()); }inline Qt::WindowFlags QWidget::windowFlags()const{return data->window_flags; }#if QT_DEPRECATED_SINCE(6, 1)inlineboolQWidget::isTopLevel()const{returnbool(windowType() &Qt::Window); }#endifinlineboolQWidget::isWindow()const{returnbool(windowType() &Qt::Window); }inlineboolQWidget::isEnabled()const{return!testAttribute(Qt::WA_Disabled); }inlineboolQWidget::isModal()const{return data->window_modality !=Qt::NonModal; }inlineintQWidget::minimumWidth()const{returnminimumSize().width(); }inlineintQWidget::minimumHeight()const{returnminimumSize().height(); }inlineintQWidget::maximumWidth()const{returnmaximumSize().width(); }inlineintQWidget::maximumHeight()const{returnmaximumSize().height(); }inlinevoidQWidget::setMinimumSize(const QSize &s){setMinimumSize(s.width(),s.height()); }inlinevoidQWidget::setMaximumSize(const QSize &s){setMaximumSize(s.width(),s.height()); }inlinevoidQWidget::setSizeIncrement(const QSize &s){setSizeIncrement(s.width(),s.height()); }inlinevoidQWidget::setBaseSize(const QSize &s){setBaseSize(s.width(),s.height()); }inlineconst QFont &QWidget::font()const{return data->fnt; }inline QFontMetrics QWidget::fontMetrics()const{returnQFontMetrics(data->fnt); }inline QFontInfo QWidget::fontInfo()const{returnQFontInfo(data->fnt); }inlinevoidQWidget::setMouseTracking(bool enable){setAttribute(Qt::WA_MouseTracking, enable); }inlineboolQWidget::hasMouseTracking()const{returntestAttribute(Qt::WA_MouseTracking); }inlineboolQWidget::underMouse()const{returntestAttribute(Qt::WA_UnderMouse); }inlinevoidQWidget::setTabletTracking(bool enable){setAttribute(Qt::WA_TabletTracking, enable); }inlineboolQWidget::hasTabletTracking()const{returntestAttribute(Qt::WA_TabletTracking); }inlineboolQWidget::updatesEnabled()const{return!testAttribute(Qt::WA_UpdatesDisabled); }inlinevoidQWidget::update(int ax,int ay,int aw,int ah){update(QRect(ax, ay, aw, ah)); }inlineboolQWidget::isVisible()const{returntestAttribute(Qt::WA_WState_Visible); }inlineboolQWidget::isHidden()const{returntestAttribute(Qt::WA_WState_Hidden); }inlinevoidQWidget::move(int ax,int ay){move(QPoint(ax, ay)); }inlinevoidQWidget::resize(int w,int h){resize(QSize(w, h)); }inlinevoidQWidget::setGeometry(int ax,int ay,int aw,int ah){setGeometry(QRect(ax, ay, aw, ah)); }inline QRect QWidget::rect()const{returnQRect(0,0,data->crect.width(),data->crect.height()); }inlineconst QRect &QWidget::geometry()const{return data->crect; }inline QSize QWidget::size()const{return data->crect.size(); }inlineintQWidget::width()const{return data->crect.width(); }inlineintQWidget::height()const{return data->crect.height(); }inline QWidget *QWidget::parentWidget()const{return static_cast<QWidget *>(QObject::parent()); }inlinevoidQWidget::setSizePolicy(QSizePolicy::Policy hor,QSizePolicy::Policy ver){setSizePolicy(QSizePolicy(hor, ver)); }inlineboolQWidget::testAttribute(Qt::WidgetAttribute attribute)const{if(attribute <int(8*sizeof(uint)))return data->widget_attributes & (1<<attribute);returntestAttribute_helper(attribute);}#define QWIDGETSIZE_MAX ((1<<24)-1)#ifndef QT_NO_DEBUG_STREAM Q_WIDGETS_EXPORT QDebug operator<<(QDebug,const QWidget *);#endif QT_END_NAMESPACE #endif// QWIDGET_H
close