Qt Windows版 - 特定问题

此页面包含有关Qt Windows版的信息。

安装位置

将Qt安装到包含空格的目录中,例如,C:\Program Files,可能会导致qmake出现问题。

请将Qt安装到没有空格的子目录中,以避免此问题。

最大路径长度

Qt和编译器工具共用的Win32 API有一个内置的最大文件路径长度为260个字符(MAX_PATH)。如果你的绝对路径或相对目录结构过于详细,这可能会以各种形式影响您。因此,建议将文件系统路径保持在合理范围内,并将构建目录放置在源目录附近。

Visual Studio

如果您在使用特殊标志(如/Zp2)时遇到奇怪的问题,这会修改结构体和联合体成员的对齐方式,那么您将需要重新编译Qt,同时为应用程序设置标志。

基于OpenGL的全屏窗口

当窗口使用基于OpenGL的表面并在全屏模式下显示时,其他顶层窗口可能会出现一些问题,这些窗口是应用程序的一部分。由于Windows DWM的限制,当进入全屏模式时,无法正确处理基于OpenGL的窗口的复合。因此,在使其他顶层窗口可见时,它们不会显示在全屏窗口的顶部。例如,菜单可能显示不正确,或对话框无法显示。

窗口可以使用基于OpenGL的表面,这可能是显式调用setSurfaceType()时的,也可能是当窗口内使用需要OpenGL的某些内容时,这将使整个窗口变为基于OpenGL。例如,QOpenGLWidgetQQuickWidget可以引发此问题。然而,如果表面位于QWindow中,它由createWindowContainer()承载,或者使用已废弃的QGLWidget,并且它确实覆盖了整个全屏窗口,那么这个问题不会发生。

为了解决这个问题,可以使用本地API在以全屏模式显示时启用WS_BORDER属性。这可以按以下方式使用

bool Widget::event(QEvent *e) {
#if defined(Q_OS_WIN)
    if (e->type() == QEvent::WinIdChange) {
        if (windowHandle()) {
            HWND handle = reinterpret_cast<HWND>(windowHandle()->winId());
            SetWindowLongPtr(handle, GWL_STYLE, GetWindowLongPtr(handle, GWL_STYLE) | WS_BORDER);
        }
    }
#endif
    return QWidget::event(e);
}

这将为全屏窗口提供一个1像素的边框,从而允许其他顶层窗口出现在顶部。

© 2024 Qt公司有限公司版权所有。本文件中包含的文档贡献者的权利归各自所有者所有。此处提供的文档按照自由软件基金会发布的GNU自由文档许可协议第1.3版所许可的条件提供。