Qt for Windows - 具体问题
本页包含有关Windows 版 Qt 的信息。
安装位置
将 Qt 安装到带空格的目录中,例如C:\Program Files,可能会导致 qmake 出错。
将 Qt 安装到不含空格的子目录中可避免此问题。
最大路径长度
Qt 和编译工具使用的 Win32 API 内置的最大文件路径长度为 260 个字符 (MAX_PATH
)。如果您的绝对或相对目录结构过于冗长,这可能会以各种形式对您造成影响。因此,建议将文件系统路径保持在限制范围内,并将构建目录放在源代码目录附近。
Visual Studio
如果您在使用修改结构和联合成员对齐方式的特殊标记(如/Zp2
)时遇到奇怪的问题,那么您需要重新编译 Qt,同时为应用程序设置标记。
基于 OpenGL 的全屏窗口
当窗口使用基于 OpenGL 的表面并以全屏模式显示时,作为应用程序一部分的其他顶层窗口可能会出现问题。由于 Windows DWM 的限制,基于 OpenGL 的窗口在进入全屏模式时无法正确处理合成。因此,其他顶层窗口在全屏显示时不会被放置在全屏窗口的顶部。例如,菜单可能无法正确显示,或对话框无法显示。
当调用setSurfaceType() 时,窗口可以显式地使用基于 OpenGL 的表面,或者在窗口内部使用需要 OpenGL 的东西时,导致整个窗口基于 OpenGL。例如,QOpenGLWidget 或QQuickWidget 就能触发这种情况。但是,如果曲面包含在使用createWindowContainer() 托管的QWindow 中,或者使用了已过时的 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 像素的边框,从而使其他顶层窗口显示在顶部。
© 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.