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。例如,QOpenGLWidget或QQuickWidget可以引发此问题。然而,如果表面位于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版所许可的条件提供。