QWindow Class

QWindow 类代表底层窗口系统中的一个窗口。更多

Header: #include <QWindow>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承:QObjectQSurface
继承于

QPaintDeviceWindow,QQuickWindow, 和QVulkanWindow

公共类型

enum AncestorMode { ExcludeTransients, IncludeTransients }
enum Visibility { Windowed, Minimized, Maximized, FullScreen, AutomaticVisibility, Hidden }

属性

公共函数

QWindow(QScreen *targetScreen = nullptr)
QWindow(QWindow *parent)
virtual ~QWindow()
QSize baseSize() const
Qt::ScreenOrientation contentOrientation() const
void create()
QCursor cursor() const
void destroy()
qreal devicePixelRatio() const
QString filePath() const
Qt::WindowFlags flags() const
virtual QObject *focusObject() const
QRect frameGeometry() const
QMargins frameMargins() const
QPoint framePosition() const
QRect geometry() const
int height() const
QIcon icon() const
bool isActive() const
bool isAncestorOf(const QWindow *child, QWindow::AncestorMode mode = IncludeTransients) const
bool isExposed() const
bool isModal() const
bool isTopLevel() const
bool isVisible() const
(since 6.0) QPointF mapFromGlobal(const QPointF &pos) const
QPoint mapFromGlobal(const QPoint &pos) const
(since 6.0) QPointF mapToGlobal(const QPointF &pos) const
QPoint mapToGlobal(const QPoint &pos) const
QRegion mask() const
int maximumHeight() const
QSize maximumSize() const
int maximumWidth() const
int minimumHeight() const
QSize minimumSize() const
int minimumWidth() const
Qt::WindowModality modality() const
qreal opacity() const
QWindow *parent(QWindow::AncestorMode mode = ExcludeTransients) const
QPoint position() const
void reportContentOrientationChange(Qt::ScreenOrientation orientation)
QSurfaceFormat requestedFormat() const
void resize(const QSize &newSize)
void resize(int w, int h)
(since 6.9) QMargins safeAreaMargins() const
QScreen *screen() const
void setBaseSize(const QSize &size)
void setCursor(const QCursor &cursor)
void setFilePath(const QString &filePath)
void setFlag(Qt::WindowType flag, bool on = true)
void setFlags(Qt::WindowFlags flags)
void setFormat(const QSurfaceFormat &format)
void setFramePosition(const QPoint &point)
void setIcon(const QIcon &icon)
bool setKeyboardGrabEnabled(bool grab)
void setMask(const QRegion &region)
void setMaximumSize(const QSize &size)
void setMinimumSize(const QSize &size)
void setModality(Qt::WindowModality modality)
bool setMouseGrabEnabled(bool grab)
void setOpacity(qreal level)
void setParent(QWindow *parent)
void setPosition(const QPoint &pt)
void setPosition(int posx, int posy)
void setScreen(QScreen *newScreen)
void setSizeIncrement(const QSize &size)
void setSurfaceType(QSurface::SurfaceType surfaceType)
void setTransientParent(QWindow *parent)
void setVisibility(QWindow::Visibility v)
void setVulkanInstance(QVulkanInstance *instance)
void setWindowState(Qt::WindowState state)
void setWindowStates(Qt::WindowStates state)
QSize sizeIncrement() const
QString title() const
QWindow *transientParent() const
Qt::WindowType type() const
void unsetCursor()
QWindow::Visibility visibility() const
QVulkanInstance *vulkanInstance() const
int width() const
WId winId() const
Qt::WindowState windowState() const
Qt::WindowStates windowStates() const
int x() const
int y() const

重新实现的公共函数

virtual QSurfaceFormat format() const override
virtual QSize size() const override
virtual QSurface::SurfaceType surfaceType() const override

公共插槽

void alert(int msec)
bool close()
void hide()
void lower()
void raise()
void requestActivate()
void requestUpdate()
void setGeometry(const QRect &rect)
void setGeometry(int posx, int posy, int w, int h)
void setHeight(int arg)
void setMaximumHeight(int h)
void setMaximumWidth(int w)
void setMinimumHeight(int h)
void setMinimumWidth(int w)
void setTitle(const QString &)
void setVisible(bool visible)
void setWidth(int arg)
void setX(int arg)
void setY(int arg)
void show()
void showFullScreen()
void showMaximized()
void showMinimized()
void showNormal()
bool startSystemMove()
bool startSystemResize(Qt::Edges edges)

信号

void activeChanged()
void contentOrientationChanged(Qt::ScreenOrientation orientation)
void focusObjectChanged(QObject *object)
void heightChanged(int arg)
void maximumHeightChanged(int arg)
void maximumWidthChanged(int arg)
void minimumHeightChanged(int arg)
void minimumWidthChanged(int arg)
void modalityChanged(Qt::WindowModality modality)
void opacityChanged(qreal opacity)
(since 6.9) void safeAreaMarginsChanged(QMargins margins)
void screenChanged(QScreen *screen)
void transientParentChanged(QWindow *transientParent)
void visibilityChanged(QWindow::Visibility visibility)
void visibleChanged(bool arg)
void widthChanged(int arg)
void windowStateChanged(Qt::WindowState windowState)
void windowTitleChanged(const QString &title)
void xChanged(int arg)
void yChanged(int arg)

静态公共成员

QWindow *fromWinId(WId id)

受保护函数

virtual void closeEvent(QCloseEvent *ev)
virtual void exposeEvent(QExposeEvent *ev)
virtual void focusInEvent(QFocusEvent *ev)
virtual void focusOutEvent(QFocusEvent *ev)
virtual void hideEvent(QHideEvent *ev)
virtual void keyPressEvent(QKeyEvent *ev)
virtual void keyReleaseEvent(QKeyEvent *ev)
virtual void mouseDoubleClickEvent(QMouseEvent *ev)
virtual void mouseMoveEvent(QMouseEvent *ev)
virtual void mousePressEvent(QMouseEvent *ev)
virtual void mouseReleaseEvent(QMouseEvent *ev)
virtual void moveEvent(QMoveEvent *ev)
virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
(since 6.0) virtual void paintEvent(QPaintEvent *ev)
virtual void resizeEvent(QResizeEvent *ev)
virtual void showEvent(QShowEvent *ev)
virtual void tabletEvent(QTabletEvent *ev)
virtual void touchEvent(QTouchEvent *ev)
virtual void wheelEvent(QWheelEvent *ev)

重新实现的受保护函数

虚拟 bool event(QEvent*ev) 覆盖

详细说明

提供父窗口的窗口将成为其父窗口的本地子窗口。

应用程序通常会使用QWidgetQQuickView 作为用户界面,而不会直接使用 QWindow。不过,如果希望将依赖性降到最低,或希望直接使用 OpenGL,也可以通过QBackingStoreQOpenGLContext 直接渲染到 QWindow。光栅窗口示例OpenGL 窗口示例是有用的参考示例,可用于说明如何使用这两种方法渲染 QWindow。

资源管理

窗口可能会占用大量内存。通常的测量方法是宽度乘高度乘颜色深度。窗口还可能包含多个缓冲区,以支持双重和三重缓冲,以及深度和模板缓冲区。要释放窗口的内存资源,请调用destroy() 函数。

内容方向

QWindow 的reportContentOrientationChange() 可用于指定窗口内容相对于屏幕的布局。内容方向只是向窗口系统提示窗口内容的方向。当您希望保持窗口大小不变,但旋转窗口内容时,尤其是在不同方向之间做旋转动画时,这个值非常有用。窗口系统可能会使用该值来确定系统弹出窗口或对话框的布局。

可见性和窗口系统暴露

默认情况下,窗口是不可见的,必须调用setVisible(true) 或show() 或类似命令才能使其可见。要重新隐藏窗口,请调用setVisible(false) 或hide() 。可见属性描述了应用程序希望窗口处于的状态。根据底层系统的不同,可见窗口可能仍然不会显示在屏幕上。例如,它可能被其他不透明窗口覆盖,或被移到屏幕物理区域之外。在有曝光通知的窗口系统中,isExposed() 访问器描述了窗口是否应被视为在屏幕上直接可见。每当窗口的某个区域失效(例如窗口系统中的曝光发生变化)时,就会调用exposeEvent() 函数。在窗口系统中,如果应用程序无法看到这些信息,isExposed() 返回的值将与isVisible() 返回的值相同。

QWindow::Visibility visibility()是一个方便的应用程序接口,它结合了 visible() 和 () 的功能。windowStates

渲染

有两种 Qt API 可用于将内容渲染到窗口中,QBackingStore 用于使用QPainter 渲染并将内容刷新到类型为QSurface::RasterSurface 的窗口中,QOpenGLContext 用于使用 OpenGL 渲染到类型为QSurface::OpenGLSurface 的窗口中。

一旦isExposed() 返回true ,应用程序就可以开始渲染,并一直渲染到isExposed() 返回false 。要了解isExposed() 的变化时间,请重新实现exposeEvent()。窗口总是会在第一次曝光事件之前收到一个调整大小事件。

初始几何图形

如果窗口的宽度和高度未初始化,窗口将从平台窗口获得合理的默认几何形状。如果位置未初始化,平台窗口将允许窗口系统定位窗口。例如,在 X11 上,窗口管理器通常会进行某种智能定位,以避免新窗口完全遮挡现有窗口。但是setGeometry() 会初始化位置和大小,因此如果您想要固定大小但自动定位,则应调用resize() 或setWidth() 和setHeight() 来代替。

成员类型文档

enum QWindow::AncestorMode

该枚举用于控制是否将临时父代视为祖先。

常量说明
QWindow::ExcludeTransients0暂存父代不视为祖先。
QWindow::IncludeTransients1临时父代被视为祖先。

enum QWindow::Visibility

该枚举描述了窗口占据或应该占据屏幕的哪一部分。

常量说明
QWindow::Windowed2窗口占据屏幕的一部分,但不一定是整个屏幕。只有在支持同时显示多个窗口的窗口系统中才会出现这种状态。在此状态下,如果 WindowFlags 允许且窗口系统支持,用户可以手动移动和调整窗口大小。
QWindow::Minimized3视窗口系统如何处理最小化窗口而定,窗口将缩减为任务栏、Dock、任务列表或桌面上的一个条目或图标。
QWindow::Maximized4窗口占据整个屏幕,标题栏仍然可见。在大多数窗口系统中,这是通过单击工具栏上的最大化按钮实现的状态。
QWindow::FullScreen5窗口占据整个屏幕,不可调整大小,也没有标题栏。在某些不支持同时显示多个窗口的平台上,这可能是窗口未隐藏时的通常可见状态。
QWindow::AutomaticVisibility1这意味着给窗口一个默认的可见状态,根据平台的不同,可能是全屏或窗口状态。它可以作为setVisibility 的参数,但永远不会从可见性访问器中读回。
QWindow::Hidden0窗口在任何情况下都是不可见的,但它可能会记住一个潜在的可见性,可以通过设置 AutomaticVisibility 恢复。

属性文档

[read-only] active : const bool

该属性用于保存窗口的活动状态

访问功能:

bool isActive() const

Notifier 信号:

void activeChanged()

另请参阅 requestActivate().

contentOrientation : Qt::ScreenOrientation

该属性表示窗口内容的方向

这是给窗口管理器的提示,以防管理器需要显示弹出窗口、对话框、状态栏等与窗口相关的附加内容。

推荐的方向是QScreen::orientation (),但应用程序不必支持所有可能的方向,因此可以选择忽略当前屏幕方向。

窗口方向和内容方向之间的差值决定了内容的旋转幅度。QScreen::angleBetween()、QScreen::transformBetween() 和QScreen::mapBetween() 可以用来计算必要的变换。

默认值为Qt::PrimaryOrientation

访问功能:

Qt::ScreenOrientation contentOrientation() const
void reportContentOrientationChange(Qt::ScreenOrientation orientation)

通知信号:

void contentOrientationChanged(Qt::ScreenOrientation orientation)

flags : Qt::WindowFlags

该属性保存窗口的窗口标志

窗口标志控制窗口在窗口系统中的外观,如是对话框、弹出式窗口还是普通窗口,以及是否应有标题栏等。

如果请求的标志无法满足,实际的窗口标志可能与 setFlags() 设置的标志不同。

访问函数:

Qt::WindowFlags flags() const
void setFlags(Qt::WindowFlags flags)

另请参见 setFlag().

height : int

该属性用于保存窗口几何体的高度

访问功能:

int height() const
void setHeight(int arg)

通知信号

void heightChanged(int arg)

maximumHeight : int

此属性保存窗口几何图形的最大高度

访问功能:

int maximumHeight() const
void setMaximumHeight(int h)

通知信号

void maximumHeightChanged(int arg)

maximumWidth : int

此属性保存窗口几何图形的最大宽度

访问功能:

int maximumWidth() const
void setMaximumWidth(int w)

通知信号

void maximumWidthChanged(int arg)

minimumHeight : int

此属性保存窗口几何图形的最小高度

访问功能:

int minimumHeight() const
void setMinimumHeight(int h)

通知信号

void minimumHeightChanged(int arg)

minimumWidth : int

此属性保存窗口几何图形的最小宽度

访问功能:

int minimumWidth() const
void setMinimumWidth(int w)

通知信号

void minimumWidthChanged(int arg)

modality : Qt::WindowModality

该属性表示窗口的模式

模式窗口会阻止其他窗口接收输入事件。Qt XML 支持两种模式:Qt::WindowModalQt::ApplicationModal

默认情况下,此属性为Qt::NonModal

访问函数:

Qt::WindowModality modality() const
void setModality(Qt::WindowModality modality)

Notifier 信号:

void modalityChanged(Qt::WindowModality modality)

另请参见 Qt::WindowModality

opacity : qreal

该属性表示窗口在窗口系统中的不透明度。

如果窗口系统支持窗口不透明度,该属性可用于淡入淡出窗口或使窗口半透明。

1.0 或以上的值被视为完全不透明,而 0.0 或以下的值被视为完全透明。介于两者之间的值表示介于两个极端之间的不同半透明程度。

默认值为 1.0。

访问功能

qreal opacity() const
void setOpacity(qreal level)

通知信号

void opacityChanged(qreal opacity)

title : QString

该属性用于保存窗口系统中的窗口标题

窗口标题可能会出现在窗口装饰的标题区域,具体取决于窗口系统和窗口标志。窗口系统还可能使用该标题在其他上下文(如任务切换器)中标识窗口。

访问功能:

QString title() const
void setTitle(const QString &)

Notifier 信号:

void windowTitleChanged(const QString &title)

另请参见 flags().

transientParent : QWindow*

该属性用于表示该窗口是暂存弹出窗口的窗口

这是给窗口管理器的提示,表明此窗口是代表暂存父窗口的对话框或弹出窗口。

根据窗口管理器的不同,为了使窗口在默认情况下居中于其暂态parent 上,可能还需要调用setFlags() 和一个合适的Qt::WindowType (如Qt::Dialog )。

访问函数:

QWindow *transientParent() const
void setTransientParent(QWindow *parent)

Notifier 信号:

void transientParentChanged(QWindow *transientParent)

另请参见 parent().

visibility : Visibility

该属性表示窗口的屏幕占用状态

可见性是指窗口在窗口系统中的显示状态是正常、最小化、最大化、全屏还是隐藏。

将可见性设置为AutomaticVisibility 意味着给窗口一个默认的可见状态,根据平台的不同,可能是全屏或窗口状态。读取可见性属性时,您将始终获得实际状态,而不是AutomaticVisibility

默认值为隐藏。

访问功能:

QWindow::Visibility visibility() const
void setVisibility(QWindow::Visibility v)

通知信号:

void visibilityChanged(QWindow::Visibility visibility)

visible : bool

该属性表示窗口是否可见

该属性控制窗口在窗口系统中的可见性。

默认情况下,窗口是不可见的,必须调用 setVisible(true) 或show() 或类似命令才能使其可见。

注意: 隐藏窗口并不会将窗口从窗口系统中移除,而只是将其隐藏。在为全屏应用程序提供专用桌面的窗口系统中(如 macOS),隐藏全屏窗口不会移除该桌面,而是将其留空。同一应用程序的另一个窗口可能会全屏显示,并填满该桌面。使用QWindow::close 可将窗口从窗口系统中完全移除。

访问功能:

bool isVisible() const
void setVisible(bool visible)

Notifier 信号:

void visibleChanged(bool arg)

另请参见 show().

width : int

此属性用于保存窗口几何图形的宽度

访问功能:

int width() const
void setWidth(int arg)

通知信号

void widthChanged(int arg)

x : int

此属性保存窗口几何图形的 x 位置

访问功能:

int x() const
void setX(int arg)

通知信号

void xChanged(int arg)

y : int

此属性用于保存窗口几何图形的 Y 位置

访问功能:

int y() const
void setY(int arg)

通知信号:

void yChanged(int arg)

成员函数 文档

[explicit] QWindow::QWindow(QScreen *targetScreen = nullptr)

targetScreen 上创建一个窗口作为顶层窗口。

在调用setVisible(true)、show() 或类似命令之前,窗口不会显示。

另请参阅 setScreen() 。

[explicit] QWindow::QWindow(QWindow *parent)

创建一个窗口,作为给定parent 窗口的子窗口。

窗口将嵌入父窗口,其坐标相对于父窗口。

屏幕继承自父窗口。

另请参阅 setParent()。

[virtual noexcept] QWindow::~QWindow()

摧毁窗户

[slot] void QWindow::alert(int msec)

使警报显示msec 毫秒。如果msec0 (默认值),则警报将无限期显示,直到窗口再次变为活动状态。此函数对活动窗口无影响。

在警报状态下,窗口会通过闪烁或跳动任务栏条目等方式表示需要注意。

QSize QWindow::baseSize() const

返回窗口的基本尺寸。

另请参阅 setBaseSize()。

[slot] bool QWindow::close()

关闭窗口。

这将关闭窗口,有效地调用destroy() 并可能退出应用程序。成功时返回true ,如果有父窗口,则返回 false(在这种情况下,应关闭顶层窗口)。

另请参阅 destroy()、QGuiApplication::quitOnLastWindowClosed() 和closeEvent()。

[virtual protected] void QWindow::closeEvent(QCloseEvent *ev)

重载此函数可处理关闭事件 (ev)。

该函数在窗口被请求关闭时被调用。如果想阻止窗口关闭,可在事件中调用QEvent::ignore() 。

另请参阅 close()。

void QWindow::create()

分配与窗口相关的平台资源。

此时,使用setFormat() 设置的曲面格式将被解析为实际的本地曲面。不过,在调用setVisible() 之前,窗口一直是隐藏的。

请注意,通常没有必要直接调用该函数,因为show(),setVisible(),winId() 以及其他需要访问平台资源的函数都会隐式调用该函数。

如有必要,请调用destroy() 释放平台资源。

另请参见 destroy()。

QCursor QWindow::cursor() const

该窗口的光标形状

另请参阅 setCursor() 和unsetCursor()。

void QWindow::destroy()

释放与该窗口相关的本地平台资源。

另请参阅 create()。

qreal QWindow::devicePixelRatio() const

返回窗口的物理像素与设备无关像素之间的比例。该值取决于窗口所在的屏幕,并可能在窗口移动时发生变化。

当设备像素比例发生变化时,QWindow 实例会收到一个类型为QEvent::DevicePixelRatioChange 的事件。

普通显示器的常见值为 1.0,苹果 "视网膜 "显示器的常见值为 2.0。

注: 对于没有平台窗口支持的窗口,即没有调用create() 的窗口,该函数将返回到相关QScreen 的设备像素比例。

另请参阅 QScreen::devicePixelRatio() 和QEvent::DevicePixelRatioChange

[override virtual protected] bool QWindow::event(QEvent *ev)

重实现:QObject::event(QEvent *e)。

重载此功能可处理发送到窗口的任何事件 (ev)。如果事件被识别并处理,则返回true

如果希望像往常一样派发鼠标事件、按键事件、调整大小事件等,请记住调用基类版本。

[virtual protected] void QWindow::exposeEvent(QExposeEvent *ev)

当窗口在未暴露和暴露状态之间移动时,窗口系统会发送暴露事件 (ev)。

暴露的窗口对用户来说是潜在可见的。如果窗口被移出屏幕、被其他窗口完全遮挡、最小化或类似情况,该函数可能会被调用,isExposed() 的值可能会变为 false。您可以使用此事件来限制昂贵的操作(如动画),使其仅在窗口显示时运行。

此事件不应用于绘制。要处理绘制,请执行paintEvent() 。

窗口首次显示时,调整大小事件总是先于显示事件发送。

另请参阅 paintEvent() 和isExposed()。

QString QWindow::filePath() const

该窗口所代表的文件名。

另请参见 setFilePath()。

[virtual protected] void QWindow::focusInEvent(QFocusEvent *ev)

重载此功能可处理焦点事件 (ev)。

当窗口接收到键盘焦点时会发送焦点事件。

另请参见 focusOutEvent().

[virtual] QObject *QWindow::focusObject() const

返回QObject ,它将是绑定焦点事件(如按键事件)的最终接收器。

[signal] void QWindow::focusObjectChanged(QObject *object)

当与焦点绑定的事件的最终接收器更改为object 时,会发出该信号。

另请参阅 focusObject() 。

[virtual protected] void QWindow::focusOutEvent(QFocusEvent *ev)

重载此功能可处理焦点移出事件 (ev)。

当窗口失去键盘焦点时会发送焦点移出事件。

另请参见 focusInEvent().

[override virtual] QSurfaceFormat QWindow::format() const

重实现:QSurface::format() 常量。

返回此窗口的实际格式。

窗口创建后,此函数将返回窗口的实际表面格式。如果平台无法满足所请求的格式,它可能与所请求的格式不同。它也可能是一个超集,例如某些缓冲区的大小可能比要求的大。

注意: 根据平台的不同,该曲面格式中的某些值可能仍然包含所请求的值,即传递给setFormat() 的值。典型的例子包括 OpenGL 版本、配置文件和选项。在create() 期间,这些值可能不会更新,因为这些值与上下文有关,而且一个窗口在其生命周期内可能与多个上下文一起使用。请使用QOpenGLContext 的 format() 来查询这些值。

另请参见 setFormat()、create()、requestedFormat() 和QOpenGLContext::format()。

QRect QWindow::frameGeometry() const

返回窗口的几何图形,包括窗框。

几何图形与屏幕的 virtualGeometry() 有关。

另请参阅 geometry() 和frameMargins()。

QMargins QWindow::frameMargins() const

返回窗口周围的窗框边距。

另请参阅 geometry() 和frameGeometry()。

QPoint QWindow::framePosition() const

返回窗口(包括窗框)的左上角位置。

返回值与frameGeometry().topLeft() 相同。

另请参阅 setFramePosition()、geometry() 和frameGeometry()。

[static] QWindow *QWindow::fromWinId(WId id)

为由其他进程或使用 Qt 下的本地库创建的窗口创建本地表示。

给定本地窗口的句柄id ,该方法将创建一个QWindow 对象,在调用setParent() 和setTransientParent() 等方法时,可使用该对象表示窗口。

在支持该方法的平台上,该方法可用于将QWindow 嵌入本地窗口,或将本地窗口嵌入QWindow

如果平台插件不支持外来窗口或嵌入本地窗口失败,该函数将返回nullptr

注意: 所生成的QWindow 不应用于操作底层本地窗口(除了重定向)或观察本地窗口的状态变化。对此类操作的任何支持都是附带的、高度依赖平台且未经测试的。

另请参阅 setParent().

QRect QWindow::geometry() const

返回窗口的几何尺寸(不包括窗框)。

几何图形与屏幕的 virtualGeometry() 有关。

另请参阅 setGeometry()、frameMargins() 和frameGeometry()。

[slot] void QWindow::hide()

隐藏窗口。

相当于调用setVisible(false)。

另请参阅 show() 和setVisible()。

[virtual protected] void QWindow::hideEvent(QHideEvent *ev)

重载此函数可处理隐藏事件 (ev)。

当窗口请求在窗口系统中隐藏时,该函数将被调用。

QIcon QWindow::icon() const

返回窗口系统中窗口的图标

另请参见 setIcon()。

bool QWindow::isActive() const

如果窗口处于活动状态,则返回true

输入焦点窗口以及与焦点窗口处于同一父级/瞬时父级链中的窗口都是这种情况。

通常情况下,从样式的角度看,活动窗口应该是活动的。

要获取当前拥有焦点的窗口,请使用QGuiApplication::focusWindow() 。

注: 属性active 的获取函数。

另请参阅 requestActivate() 。

bool QWindow::isAncestorOf(const QWindow *child, QWindow::AncestorMode mode = IncludeTransients) const

如果窗口是给定的child 的祖先,则返回true 。如果modeIncludeTransients ,则暂存父窗口也被视为祖窗口。

bool QWindow::isExposed() const

返回该窗口是否在窗口系统中显示。

窗口未显示时,应用程序会显示该窗口,但它仍未在窗口系统中显示,因此应用程序应尽量减少动画和其他图形活动。

每次该值发生变化时,都会发送一个exposeEvent() 。

另请参阅 exposeEvent()。

bool QWindow::isModal() const

返回窗口是否为模式窗口。

模式窗口会阻止其他窗口获得任何输入。

另请参阅 QWindow::modality

bool QWindow::isTopLevel() const

返回窗口是否为顶层窗口,即是否没有父窗口。

[virtual protected] void QWindow::keyPressEvent(QKeyEvent *ev)

覆盖此功能可处理按键事件 (ev)。

另请参见 keyReleaseEvent().

[virtual protected] void QWindow::keyReleaseEvent(QKeyEvent *ev)

重载此功能可处理按键释放事件 (ev)。

另请参见 keyPressEvent().

[slot] void QWindow::lower()

降低窗口系统中的窗口。

要求降低窗口,使其显示在其他窗口下方。

[since 6.0] QPointF QWindow::mapFromGlobal(const QPointF &pos) const

将全局屏幕坐标pos 转换为窗口坐标。

此函数在 Qt 6.0 中引入。

另请参阅 mapToGlobal()。

QPoint QWindow::mapFromGlobal(const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWindow::mapToGlobal(const QPointF &pos) const

将窗口坐标pos 转换为全局屏幕坐标。例如,mapToGlobal(QPointF(0,0)) 将给出窗口左上角像素的全局坐标。

此函数在 Qt 6.0 中引入。

另请参阅 mapFromGlobal()。

QPoint QWindow::mapToGlobal(const QPoint &pos) const

这是一个重载函数。

QRegion QWindow::mask() const

返回窗口上设置的屏蔽。

掩码是对窗口系统的提示,即应用程序不希望接收指定区域外的鼠标或触摸输入。

另请参阅 setMask()。

QSize QWindow::maximumSize() const

返回窗口的最大尺寸。

另请参阅 setMaximumSize()。

QSize QWindow::minimumSize() const

返回窗口的最小尺寸。

另请参阅 setMinimumSize()。

[signal] void QWindow::modalityChanged(Qt::WindowModality modality)

当 Qwindow::modality 属性更改为modality 时,将发出该信号。

注: 属性modality 的通知信号。

[virtual protected] void QWindow::mouseDoubleClickEvent(QMouseEvent *ev)

重载此功能可处理鼠标双击事件 (ev)。

另请参阅 mousePressEvent() 和QStyleHints::mouseDoubleClickInterval()。

[virtual protected] void QWindow::mouseMoveEvent(QMouseEvent *ev)

重载此功能可处理鼠标移动事件 (ev)。

[virtual protected] void QWindow::mousePressEvent(QMouseEvent *ev)

重载此功能可处理鼠标按下事件 (ev)。

另请参见 mouseReleaseEvent().

[virtual protected] void QWindow::mouseReleaseEvent(QMouseEvent *ev)

重载此功能可处理鼠标释放事件 (ev)。

另请参见 mousePressEvent().

[virtual protected] void QWindow::moveEvent(QMoveEvent *ev)

重载此功能可处理窗口移动事件 (ev)。

[virtual protected] bool QWindow::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)

重载此功能可处理平台相关事件。将给出eventTypemessageresult

这可能会使您的应用程序变得不可移植。

只有当事件被处理时才返回 true。

[virtual protected, since 6.0] void QWindow::paintEvent(QPaintEvent *ev)

每当窗口的某个区域需要重新绘制时,窗口系统就会发送绘制事件 (ev),例如在最初显示窗口时,或由于移动另一个窗口而遮盖了窗口的某些部分。

无论窗口的显示状态如何,应用程序都要响应上色事件,向窗口中进行渲染。例如,可以在窗口暴露之前发送绘制事件,为向用户显示窗口做好准备。

此函数在 Qt 6.0 中引入。

另请参阅 exposeEvent()。

QWindow *QWindow::parent(QWindow::AncestorMode mode = ExcludeTransients) const

返回父窗口(如果有)。

如果modeIncludeTransients ,则在没有父窗口的情况下返回暂存父窗口。

没有父窗口的窗口称为顶层窗口。

另请参阅 setParent() 。

QPoint QWindow::position() const

返回窗口在桌面上的位置,不包括任何窗口框架

注意: 并非所有窗口系统都支持设置或查询顶层窗口位置。在此类系统中,通过编程移动窗口可能不会有任何效果,当前位置可能会返回人为值,如QPoint(0, 0)

另请参阅 setPosition().

[slot] void QWindow::raise()

提升窗口系统中的窗口。

要求提升窗口,使其显示在其他窗口上方。

[slot] void QWindow::requestActivate()

要求激活窗口,即接收键盘焦点。

另请参阅 isActive() 和QGuiApplication::focusWindow()。

[slot] void QWindow::requestUpdate()

计划向该窗口发送QEvent::UpdateRequest 事件。

在可能的平台上,事件会与显示屏 vsync 同步发送。否则,事件最多延迟 5 毫秒后发送。如果窗口的相关屏幕报告的refresh rate 频率高于 60 Hz,则时间间隔将缩减为小于 5 的值。额外的时间是为了给事件循环一点空闲时间来收集系统事件,可以使用 QT_QPA_UPDATE_IDLE_TIME 环境变量来覆盖。

在驱动动画时,应在绘制完成后调用一次该函数。多次调用此函数将导致向窗口传递一个事件。

QWindow 的子类应重新实现event() ,拦截事件并调用应用程序的渲染代码,然后调用基类的实现。

注意: 子类对event() 的重新实现必须调用基类的实现,除非它绝对确定该事件不需要由基类处理。例如,该函数的默认实现依赖于QEvent::Timer 事件。因此,过滤掉这些事件将破坏更新事件的传递。

QSurfaceFormat QWindow::requestedFormat() const

返回所请求的窗口表面格式。

如果平台实现不支持请求的格式,则 requestedFormat 将与实际窗口格式不同。

这是setFormat() 设置的值。

另请参阅 setFormat() 和format()。

void QWindow::resize(const QSize &newSize)

将窗口的大小(不包括任何窗口边框)设置为newSize

另请参阅 size() 和geometry()。

void QWindow::resize(int w, int h)

将窗口的大小(不包括任何窗口边框)设置为由宽度w 和高度构建的QSizeh

关于交互式调整窗口大小,请参阅startSystemResize() 。

另请参阅 size() 和geometry()。

[virtual protected] void QWindow::resizeEvent(QResizeEvent *ev)

重载此功能可处理调整大小事件 (ev)。

每当窗口在窗口系统中被调整大小时,调整大小事件就会被调用,这可能是直接通过窗口系统确认setGeometry() 或resize() 请求,也可能是间接通过用户手动调整窗口大小。

[since 6.9] QMargins QWindow::safeAreaMargins() const

返回窗口的安全区域边距。

安全区域代表窗口中可安全放置内容的部分,在此放置的内容不会被其他用户界面元素(如系统用户界面)遮挡或与之冲突。

边距是相对于窗口内部几何形状而言的,即QRect(0, 0,width(),height()).

void PaintDeviceWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QRect rect(0, 0, width(), height());
    painter.fillRect(rect, QGradient::SunnyMorning);
    painter.fillRect(rect - safeAreaMargins(), QGradient::DustyGrass);
}

该函数在 Qt 6.9 中引入。

另请参阅 geometry() 和safeAreaMarginsChanged()。

[signal, since 6.9] void QWindow::safeAreaMarginsChanged(QMargins margins)

当安全区域边距更改为margins 时,将发出该信号。

此函数在 Qt 6.9 中引入。

另请参阅 safeAreaMargins() 。

QScreen *QWindow::screen() const

返回显示窗口的屏幕,如果没有则为空。

对于子窗口,则返回相应顶层窗口的屏幕。

另请参阅 setScreen() 和QScreen::virtualSiblings()。

[signal] void QWindow::screenChanged(QScreen *screen)

当窗口的screen 发生变化时,或通过setScreen() 明确设置,或在窗口的屏幕被移除时自动发生变化,都会发出该信号。

void QWindow::setBaseSize(const QSize &size)

设置窗口的基本size

如果窗口定义了sizeIncrement(),基本尺寸将用于计算合适的窗口尺寸。

另请参阅 setMinimumSize()、setMaximumSize()、setSizeIncrement() 和baseSize()。

void QWindow::setCursor(const QCursor &cursor)

设置此窗口的光标形状

除非设置了覆盖光标,否则当鼠标位于此窗口上方时,cursor 将显示此形状。有关一系列有用的形状,请参阅list of predefined cursor objects

如果没有设置光标,或在调用unsetCursor() 后,将使用父窗口的光标。

默认情况下,游标的形状为Qt::ArrowCursor

如果光标离开窗口,即使鼠标被抓住,某些底层窗口实现也会重置光标。如果希望为所有窗口设置光标,即使在窗口外也是如此,可以考虑使用QGuiApplication::setOverrideCursor() 。

另请参阅 cursor() 和QGuiApplication::setOverrideCursor()。

void QWindow::setFilePath(const QString &filePath)

设置该窗口所代表的文件名。

窗口系统可能会使用filePath 在磁贴栏中显示该窗口所代表文档的路径。

另请参阅 filePath()。

void QWindow::setFlag(Qt::WindowType flag, bool on = true)

如果on 为 true,则设置该窗口的窗口标志flag ;否则清除该标志。

另请参阅 setFlags()、flags() 和type()。

void QWindow::setFormat(const QSurfaceFormat &format)

设置窗口的表面format

格式决定了颜色深度、alpha、深度和模板缓冲区大小等属性。例如,为窗口设置透明背景(前提是窗口系统支持合成,并且窗口中的其他内容不会使其再次不透明):

QSurfaceFormat format;
format.setAlphaBufferSize(8);
window.setFormat(format);

曲面格式将在create() 函数中解决。在调用create() 后再调用此函数将不会重新解析原生曲面的曲面格式。

如果未通过此函数明确设置格式,则将使用QSurfaceFormat::defaultFormat() 返回的格式。这意味着在创建多个窗口时,可以在创建第一个窗口之前调用一次QSurfaceFormat::setDefaultFormat() 来代替对该函数的单独调用。

另请参见 format()、create()、destroy() 和QSurfaceFormat::setDefaultFormat()。

void QWindow::setFramePosition(const QPoint &point)

设置窗口(point )的左上角位置,包括窗口边框。

该位置与屏幕的 virtualGeometry() 有关。

另请参阅 framePosition()、setGeometry() 和frameGeometry()。

[slot] void QWindow::setGeometry(const QRect &rect)

将窗口的几何尺寸(不包括窗框)设置为rect

几何图形与屏幕的 virtualGeometry() 有关。

另请参阅 geometry()。

[slot] void QWindow::setGeometry(int posx, int posy, int w, int h)

将窗口的几何形状(不包括窗框)设置为由posx,posy,wh 构建的矩形。

几何图形与屏幕的 virtualGeometry() 有关。

另请参阅 geometry()。

void QWindow::setIcon(const QIcon &icon)

在窗口系统中设置窗口的icon

窗口图标可能会被窗口系统用于装饰窗口和/或在任务切换器中使用。

注意: 在 macOS 上,窗口标题栏图标用于代表文档的窗口,只有同时设置了文件路径才会显示。

另请参阅 icon() 和setFilePath()。

bool QWindow::setKeyboardGrabEnabled(bool grab)

设置是否启用键盘抓取(grab )。

如果返回值为 true,则窗口会接收所有按键事件,直到调用 setKeyboardGrabEnabled(false) 为止;其他窗口则不会接收任何按键事件。鼠标事件不受影响。如果要抓取鼠标事件,请使用setMouseGrabEnabled() 。

另请参阅 setMouseGrabEnabled()。

void QWindow::setMask(const QRegion &region)

设置窗口的掩码。

遮罩是对窗口系统的提示,即应用程序不希望接收给定region 以外的鼠标或触摸输入。

窗口管理器可能会也可能不会选择显示未包含在掩码中的窗口区域,因此应用程序有责任将未包含在掩码中的区域清除为透明。

另请参见 mask()。

void QWindow::setMaximumSize(const QSize &size)

设置窗口的最大尺寸。

这是给窗口管理器的一个提示,以防止窗口大小超过指定的size

另请参阅 setMinimumSize() 和maximumSize()。

void QWindow::setMinimumSize(const QSize &size)

设置窗口的最小尺寸。

这是给窗口管理器的一个提示,以防止将窗口大小调整到低于指定的size

另请参阅 setMaximumSize() 和minimumSize()。

bool QWindow::setMouseGrabEnabled(bool grab)

设置是否启用鼠标抓取功能 (grab)。

如果返回值为 true,则窗口会接收所有鼠标事件,直到调用 setMouseGrabEnabled(false) 为止;其他窗口则不会接收任何鼠标事件。键盘事件不受影响。如果要抓取键盘事件,请使用setKeyboardGrabEnabled() 。

另请参阅 setKeyboardGrabEnabled()。

void QWindow::setParent(QWindow *parent)

设置parent 窗口。这将导致窗口系统管理窗口的剪辑,因此它将被剪辑到parent 窗口。

parent 设置为nullptr 将使窗口成为顶层窗口。

如果parent 是由fromWinId() 创建的窗口,那么当前窗口将嵌入parent (如果平台支持)。

另请参阅 parent()。

void QWindow::setPosition(const QPoint &pt)

将窗口在桌面上的位置设置为pt

该位置与其屏幕的 virtualGeometry() 有关。

关于交互式移动窗口,请参阅startSystemMove() 。关于交互式调整窗口大小,请参阅startSystemResize() 。

注意: 并非所有窗口系统都支持设置或查询顶层窗口位置。在这样的系统中,通过编程移动窗口可能不会有任何效果,当前位置可能会返回人工值,如QPoint(0, 0)

另请参阅 position() 和startSystemMove()。

void QWindow::setPosition(int posx, int posy)

将窗口在桌面上的位置设置为posxposy

位置与屏幕的 virtualGeometry() 有关。

另请参阅 position() 。

void QWindow::setScreen(QScreen *newScreen)

设置显示窗口的屏幕。

如果窗口已创建,则将在newScreen 上重新创建。

注意: 如果屏幕是由多个屏幕组成的虚拟桌面的一部分,窗口不会自动移动到newScreen 。要相对于屏幕放置窗口,请使用屏幕的 topLeft() 位置。

此函数仅适用于顶层窗口。

另请参阅 screen() 和QScreen::virtualSiblings()。

void QWindow::setSizeIncrement(const QSize &size)

设置窗口大小的增量 (size)。

当用户调整窗口大小时,大小将以sizeIncrement().width() 像素为单位水平移动,以baseSize() 为基础垂直移动sizeIncrement().height() 像素。

默认情况下,该属性包含一个宽度和高度均为零的大小。

窗口系统可能不支持尺寸增量。

另请参阅 sizeIncrement()、setBaseSize()、setMinimumSize() 和setMaximumSize()。

void QWindow::setSurfaceType(QSurface::SurfaceType surfaceType)

设置窗口的surfaceType

指定窗口是用于光栅渲染(QBackingStore ),还是用于 OpenGL 渲染(QOpenGLContext )。

create() 函数中创建本地表面时,将使用surfaceType 。在创建本地表面后调用此函数,需要调用destroy() 和create() 释放旧的本地表面并创建新的表面。

另请参阅 surfaceType(),QBackingStore,QOpenGLContext,create() 和destroy() 。

void QWindow::setVulkanInstance(QVulkanInstance *instance)

将此窗口与指定的 Vulkaninstance 关联。

instance 只要该 实例存在,就必须保持有效。QWindow

另请参阅 vulkanInstance()。

void QWindow::setWindowState(Qt::WindowState state)

设置窗口的屏幕占用状态

窗口state 表示窗口在窗口系统中显示为最大化、最小化、全屏还是正常。

枚举值Qt::WindowActive 不是可接受的参数。

另请参阅 windowState(),showNormal(),showFullScreen(),showMinimized(),showMaximized() 和setWindowStates() 。

void QWindow::setWindowStates(Qt::WindowStates state)

设置窗口的屏幕占用状态

窗口state 表示窗口在窗口系统中是否显示为最大化、最小化和/或全屏。

窗口可以处于几种状态的组合。例如,如果窗口同时处于最小化和最大化状态,则窗口将显示为最小化,但点击任务栏条目将恢复为最大化状态。

不应设置枚举值Qt::WindowActive

另请参阅 windowStates(),showNormal(),showFullScreen(),showMinimized() 和showMaximized().

[slot] void QWindow::show()

显示窗口。

对于子窗口,这相当于调用showNormal() 。否则,它相当于调用showFullScreen(),showMaximized(), 或showNormal(), 具体取决于平台对窗口类型和标记的默认行为。

另请参阅 showFullScreen()、showMaximized()、showNormal()、hide()、QStyleHints::showIsFullScreen() 和flags()。

[virtual protected] void QWindow::showEvent(QShowEvent *ev)

重载此函数可处理显示事件 (ev)。

该函数在窗口请求可见时被调用。

如果窗口被窗口系统成功显示,随后将发生调整大小和暴露事件。

[slot] void QWindow::showFullScreen()

将窗口显示为全屏。

相当于调用setWindowStates(Qt::WindowFullScreen) 然后调用setVisible(true)。

有关特定平台的注意事项和限制,请参阅QWidget::showFullScreen() 文档。

另请参阅 setWindowStates() 和setVisible()。

[slot] void QWindow::showMaximized()

显示窗口最大化。

相当于调用setWindowStates(Qt::WindowMaximized) 然后调用setVisible(true)。

另请参阅 setWindowStates() 和setVisible()。

[slot] void QWindow::showMinimized()

显示窗口已最小化。

相当于调用setWindowStates(Qt::WindowMinimized) 然后调用setVisible(true)。

另请参阅 setWindowStates() 和setVisible() 。

[slot] void QWindow::showNormal()

以正常方式显示窗口,即既非最大化、最小化,也非全屏。

相当于调用setWindowStates(Qt::WindowNoState) 然后调用setVisible(true)。

另请参阅 setWindowStates() 和setVisible()。

[override virtual] QSize QWindow::size() const

重实现:QSurface::size() 常量。

返回窗口的大小(不包括任何窗口边框

另请参阅 resize()。

QSize QWindow::sizeIncrement() const

返回窗口的增量大小。

另请参阅 setSizeIncrement()。

[slot] bool QWindow::startSystemMove()

启动特定系统的移动操作

在支持该操作的平台上,调用此操作将在窗口上启动交互式移动操作。实际操作可能因平台而异。通常,它会使窗口跟随鼠标光标移动,直到释放鼠标按钮。

在支持该方法的平台上,这种移动窗口的方法比setPosition 更受青睐,因为它可以让移动窗口具有更原生的外观和感觉,例如,让窗口管理器将此窗口与其他窗口扣在一起,或在拖动到屏幕边缘时使用带有动画的特殊平铺或大小调整行为。此外,在某些平台(如 Wayland)上不支持setPosition ,因此这是应用程序影响其位置的唯一方法。

如果系统支持该操作,则返回 true。

[slot] bool QWindow::startSystemResize(Qt::Edges edges)

启动特定于系统的调整大小操作

在支持该操作的平台上,调用此选项将启动对窗口的交互式调整大小操作。实际操作可能因平台而异。通常,它会调整窗口大小,使其边缘跟随鼠标光标移动。

在支持该方法的平台上,这种调整窗口大小的方法比setGeometry 更受青睐,因为它能让调整窗口大小的操作看起来更像本地操作,例如,让窗口管理器将此窗口与其他窗口相对应,或在拖动到屏幕边缘时,使用带有动画的特殊调整行为。

edges 应为单个边缘或两个相邻边缘(一个角)。不允许使用其他值。

如果系统支持该操作,则返回 true。

[override virtual] QSurface::SurfaceType QWindow::surfaceType() const

重实现:QSurface::surfaceType() 常量。

返回窗口的表面类型。

另请参阅 setSurfaceType()。

[virtual protected] void QWindow::tabletEvent(QTabletEvent *ev)

覆盖此功能可处理平板电脑按压、移动和释放事件 (ev)。

近距离进入和离开事件不会发送到窗口,而是发送到应用程序实例。

[virtual protected] void QWindow::touchEvent(QTouchEvent *ev)

覆盖此功能可处理触摸事件 (ev)。

Qt::WindowType QWindow::type() const

返回窗口的类型。

返回窗口标志中表示窗口是否为对话框、工具提示、弹出窗口、常规窗口等的部分。

另请参阅 flags() 和setFlags()。

void QWindow::unsetCursor()

恢复该窗口的默认箭头光标。

QVulkanInstance *QWindow::vulkanInstance() const

如果设置了相关的 Vulkan 实例,则返回该实例,否则返回nullptr

另请参见 setVulkanInstance()。

[virtual protected] void QWindow::wheelEvent(QWheelEvent *ev)

重载此功能可处理鼠标滚轮或其他滚轮事件 (ev)。

WId QWindow::winId() const

返回窗口的平台 ID。

注意: 如果尚未创建平台窗口,则此函数将导致创建平台窗口。如果平台窗口创建失败,则返回 0。

对于该 id 可能有用的平台,返回的值将唯一代表相应屏幕内的窗口。

另请参阅 screen()。

Qt::WindowState QWindow::windowState() const

窗口的屏幕占用状态

另请参阅 setWindowState() 和windowStates()。

[signal] void QWindow::windowStateChanged(Qt::WindowState windowState)

windowState 发生变化时,会发出该信号,该信号可以通过setWindowStates() 明确设置,也可以在用户点击标题栏按钮或通过其他方式自动设置。

Qt::WindowStates QWindow::windowStates() const

窗口的屏幕占用状态

窗口可以处于多种状态的组合。例如,如果窗口同时处于最小化和最大化状态,则窗口会显示为最小化,但点击任务栏条目会将其恢复到最大化状态。

另请参阅 setWindowStates()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.