123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 | // 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 QWINDOW_H#define QWINDOW_H#include <QtGui/qtguiglobal.h>#include <QtCore/QObject>#include <QtCore/QEvent>#include <QtCore/QMargins>#include <QtCore/QRect>#include <QtCore/qnamespace.h>#include <QtCore/qnativeinterface.h>#include <QtGui/qsurface.h>#include <QtGui/qsurfaceformat.h>#include <QtGui/qwindowdefs.h>#include <QtGui/qicon.h>#ifndef QT_NO_CURSOR#include <QtGui/qcursor.h>#endif QT_BEGIN_NAMESPACE class QWindowPrivate;class QExposeEvent;class QPaintEvent;class QFocusEvent;class QMoveEvent;class QResizeEvent;class QShowEvent;class QHideEvent;class QCloseEvent;class QKeyEvent;class QMouseEvent;#if QT_CONFIG(wheelevent)class QWheelEvent;#endifclass QTouchEvent;#if QT_CONFIG(tabletevent)class QTabletEvent;#endifclass QPlatformSurface;class QPlatformWindow;class QBackingStore;class QScreen;class QAccessibleInterface;class QWindowContainer;#ifndef QT_NO_DEBUG_STREAMclass QDebug;#endif#if QT_CONFIG(vulkan) || defined(Q_QDOC)class QVulkanInstance;#endifclass Q_GUI_EXPORT QWindow :public QObject,public QSurface { Q_OBJECT Q_DECLARE_PRIVATE(QWindow)// All properties which are declared here are inherited by QQuickWindow and therefore available in QML.// So please think carefully about what it does to the QML namespace if you add any new ones,// particularly the possible meanings these names might have in any specializations of Window.// For example "state" (meaning windowState) is not a good property to declare, because it has// a different meaning in QQuickItem, and users will tend to assume it is the same for Window.// Any new properties which you add here MUST be versioned and MUST be documented both as// C++ properties in qwindow.cpp AND as QML properties in qquickwindow.cpp.// https://doc.qt.io/qt/qtqml-cppintegration-definetypes.html#type-revisions-and-versionsQ_PROPERTY(QString title READ title WRITE setTitle NOTIFY windowTitleChanged)Q_PROPERTY(Qt::WindowModality modality READ modality WRITE setModality NOTIFY modalityChanged)Q_PROPERTY(Qt::WindowFlags flags READ flags WRITE setFlags)Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged)Q_PROPERTY(int y READ y WRITE setY NOTIFY yChanged)Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged)Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight NOTIFY minimumHeightChanged)Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth NOTIFY maximumWidthChanged)Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight NOTIFY maximumHeightChanged)Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)Q_PROPERTY(bool active READ isActive NOTIFY activeChanged REVISION(2,1))Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged REVISION(2,1))Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation WRITE reportContentOrientationChange NOTIFY contentOrientationChanged)Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged REVISION(2,1))#ifdef Q_QDOCQ_PROPERTY(QWindow* transientParent READ transientParent WRITE setTransientParent NOTIFY transientParentChanged)#elseQ_PRIVATE_PROPERTY(QWindow::d_func(), QWindow* transientParent MEMBER transientParent WRITE setTransientParent NOTIFY transientParentChanged REVISION(2,13))#endifpublic:enum Visibility { Hidden =0, AutomaticVisibility, Windowed, Minimized, Maximized, FullScreen };Q_ENUM(Visibility)enum AncestorMode { ExcludeTransients, IncludeTransients };Q_ENUM(AncestorMode)explicitQWindow(QScreen *screen =nullptr);explicitQWindow(QWindow *parent);~QWindow();voidsetSurfaceType(SurfaceType surfaceType); SurfaceType surfaceType()const override;boolisVisible()const; Visibility visibility()const;voidsetVisibility(Visibility v);voidcreate(); WId winId()const; QWindow *parent(AncestorMode mode = ExcludeTransients)const;voidsetParent(QWindow *parent);boolisTopLevel()const;boolisModal()const;Qt::WindowModality modality()const;voidsetModality(Qt::WindowModality modality);voidsetFormat(const QSurfaceFormat &format); QSurfaceFormat format()const override; QSurfaceFormat requestedFormat()const;voidsetFlags(Qt::WindowFlags flags);Qt::WindowFlags flags()const;voidsetFlag(Qt::WindowType,bool on =true);Qt::WindowType type()const; QString title()const;voidsetOpacity(qreal level); qreal opacity()const;voidsetMask(const QRegion ®ion); QRegion mask()const;boolisActive()const;voidreportContentOrientationChange(Qt::ScreenOrientation orientation);Qt::ScreenOrientation contentOrientation()const; qreal devicePixelRatio()const;Qt::WindowState windowState()const;Qt::WindowStates windowStates()const;voidsetWindowState(Qt::WindowState state);voidsetWindowStates(Qt::WindowStates states);voidsetTransientParent(QWindow *parent); QWindow *transientParent()const;boolisAncestorOf(const QWindow *child, AncestorMode mode = IncludeTransients)const;boolisExposed()const;inlineintminimumWidth()const{returnminimumSize().width(); }inlineintminimumHeight()const{returnminimumSize().height(); }inlineintmaximumWidth()const{returnmaximumSize().width(); }inlineintmaximumHeight()const{returnmaximumSize().height(); } QSize minimumSize()const; QSize maximumSize()const; QSize baseSize()const; QSize sizeIncrement()const;voidsetMinimumSize(const QSize &size);voidsetMaximumSize(const QSize &size);voidsetBaseSize(const QSize &size);voidsetSizeIncrement(const QSize &size); QRect geometry()const; QMargins frameMargins()const; QRect frameGeometry()const; QPoint framePosition()const;voidsetFramePosition(const QPoint &point); QMargins safeAreaMargins()const;inlineintwidth()const{returngeometry().width(); }inlineintheight()const{returngeometry().height(); }inlineintx()const{returngeometry().x(); }inlineinty()const{returngeometry().y(); } QSize size()const override {returngeometry().size(); }inline QPoint position()const{returngeometry().topLeft(); }voidsetPosition(const QPoint &pt);voidsetPosition(int posx,int posy);voidresize(const QSize &newSize);voidresize(int w,int h);voidsetFilePath(const QString &filePath); QString filePath()const;voidsetIcon(const QIcon &icon); QIcon icon()const;voiddestroy(); QPlatformWindow *handle()const;boolsetKeyboardGrabEnabled(bool grab);boolsetMouseGrabEnabled(bool grab); QScreen *screen()const;voidsetScreen(QScreen *screen);virtual QAccessibleInterface *accessibleRoot()const;virtual QObject *focusObject()const; QPointF mapToGlobal(const QPointF &pos)const; QPointF mapFromGlobal(const QPointF &pos)const; QPoint mapToGlobal(const QPoint &pos)const; QPoint mapFromGlobal(const QPoint &pos)const;#ifndef QT_NO_CURSOR QCursor cursor()const;voidsetCursor(const QCursor &);voidunsetCursor();#endifstatic QWindow *fromWinId(WId id);#if QT_CONFIG(vulkan) || defined(Q_QDOC)voidsetVulkanInstance(QVulkanInstance *instance); QVulkanInstance *vulkanInstance()const;#endifQT_DECLARE_NATIVE_INTERFACE_ACCESSOR(QWindow)public Q_SLOTS:Q_REVISION(2,1)voidrequestActivate();voidsetVisible(bool visible);voidshow();voidhide();voidshowMinimized();voidshowMaximized();voidshowFullScreen();voidshowNormal();boolclose();voidraise();voidlower();boolstartSystemResize(Qt::Edges edges);boolstartSystemMove();voidsetTitle(const QString &);voidsetX(int arg);voidsetY(int arg);voidsetWidth(int arg);voidsetHeight(int arg);voidsetGeometry(int posx,int posy,int w,int h);voidsetGeometry(const QRect &rect);voidsetMinimumWidth(int w);voidsetMinimumHeight(int h);voidsetMaximumWidth(int w);voidsetMaximumHeight(int h);Q_REVISION(2,1)voidalert(int msec);Q_REVISION(2,3)voidrequestUpdate(); Q_SIGNALS:voidscreenChanged(QScreen *screen);voidmodalityChanged(Qt::WindowModality modality);voidwindowStateChanged(Qt::WindowState windowState);Q_REVISION(2,2)voidwindowTitleChanged(const QString &title);voidxChanged(int arg);voidyChanged(int arg);voidwidthChanged(int arg);voidheightChanged(int arg);voidminimumWidthChanged(int arg);voidminimumHeightChanged(int arg);voidmaximumWidthChanged(int arg);voidmaximumHeightChanged(int arg);Q_REVISION(6,9)voidsafeAreaMarginsChanged(QMargins arg);voidvisibleChanged(bool arg);Q_REVISION(2,1)voidvisibilityChanged(QWindow::Visibility visibility);Q_REVISION(2,1)voidactiveChanged();voidcontentOrientationChanged(Qt::ScreenOrientation orientation);voidfocusObjectChanged(QObject *object);Q_REVISION(2,1)voidopacityChanged(qreal opacity);Q_REVISION(2,13)voidtransientParentChanged(QWindow *transientParent);protected:virtualvoidexposeEvent(QExposeEvent *);virtualvoidresizeEvent(QResizeEvent *);virtualvoidpaintEvent(QPaintEvent *);virtualvoidmoveEvent(QMoveEvent *);virtualvoidfocusInEvent(QFocusEvent *);virtualvoidfocusOutEvent(QFocusEvent *);virtualvoidshowEvent(QShowEvent *);virtualvoidhideEvent(QHideEvent *);virtualvoidcloseEvent(QCloseEvent *);virtualboolevent(QEvent *) override;virtualvoidkeyPressEvent(QKeyEvent *);virtualvoidkeyReleaseEvent(QKeyEvent *);virtualvoidmousePressEvent(QMouseEvent *);virtualvoidmouseReleaseEvent(QMouseEvent *);virtualvoidmouseDoubleClickEvent(QMouseEvent *);virtualvoidmouseMoveEvent(QMouseEvent *);#if QT_CONFIG(wheelevent)virtualvoidwheelEvent(QWheelEvent *);#endifvirtualvoidtouchEvent(QTouchEvent *);#if QT_CONFIG(tabletevent)virtualvoidtabletEvent(QTabletEvent *);#endifvirtualboolnativeEvent(const QByteArray &eventType,void*message, qintptr *result);QWindow(QWindowPrivate &dd, QWindow *parent);private:Q_PRIVATE_SLOT(d_func(),void_q_clearAlert()) QPlatformSurface *surfaceHandle()const override;Q_DISABLE_COPY(QWindow)friend class QGuiApplication;friend class QGuiApplicationPrivate;friend class QWindowContainer;friend Q_GUI_EXPORT QWindowPrivate *qt_window_private(QWindow *window);};#ifndef Q_QDOC// should these be seen by clang-qdoc?template<>inline QWindow *qobject_cast<QWindow*>(QObject *o){if(!o || !o->isWindowType())returnnullptr;return static_cast<QWindow*>(o);}template<>inlineconst QWindow *qobject_cast<const QWindow*>(const QObject *o){if(!o || !o->isWindowType())returnnullptr;return static_cast<const QWindow*>(o);}#endif// !Q_QDOC#ifndef QT_NO_DEBUG_STREAM Q_GUI_EXPORT QDebug operator<<(QDebug,const QWindow *);#endif QT_END_NAMESPACE #endif// QWINDOW_H
|