Qt for Windows - 具体问题

此页面包含的信息有关 Qt for Windows .

安装位置

把 Qt 安装到带空格的目录下,例如 C:\Program Files ,可能导致像以下的链接器错误:

c:\program.obj not found
					

把 Qt 安装到不带空格的子目录下,能避免此问题。

最大路径长度

The Win32 API that both Qt and compiler tools use has a built-in maximum file path length of 260 characters ( MAX_PATH ). This can hit you in various forms if either your absolute or relative directory structures are too verbose. It is therefore recommended to keep the file system paths within limits, and put build directories nearby the source directories.

可能的 GL 冲突

存在已知问题,当运行 Microsoft NetMeeting、Lotus SameTime 及其它在直接渲染被启用的时候要求抓取屏幕的应用程序时。其它 GL 应用程序可能不会如期望般工作,除非直接渲染被禁用。

Visual Studio

Visual C ++ 链接器不理解带空格的文件名 (例如 C:\Program files\Qt\ ) 所以必须把它移至另一位置,或自己明确设置路径。

QTDIR=C:\Progra~1\Qt
					

若使用修改 Structure 和 Union 成员对齐的特殊标志时遇到奇怪问题 (譬如 /Zp2 ) 那么就需要采用为应用程序设置的标志重新编译 Qt。

基于 OpenGL 的窗口全屏

当窗口使用基于 OpenGL 的表面并以全屏方式出现时,属于应用程序的其它顶层窗口可能发生问题。由于 Windows DWM (桌面窗口管理器) 的局限性,基于 OpenGL 的窗口合成未被正确处理,当进入全屏模式时。因此,其它顶层窗口不会被放置在全屏窗口的顶部,当它们变得可见时。例如,菜单可能未正确出现,或对话框无法展示。

窗口可以明确使用基于 OpenGL 的表面,当 setSurfaceType() 被调用,或当要求 OpenGL 的东西在窗口中被使用,导致整个窗口基于 OpenGL。例如 QOpenGLWidget or QQuickWidget 可以触发这。不管怎样,若表面包含在 QWindow 其托管采用 createWindowContainer() ,或使用过时的 QGLWidget 且它确实覆盖了整个全屏窗口,此问题就不会发生。

要解决此问题,可以使用 QWindowsWindowFunction 以启用本机窗口标志,设置 WS_BORDER 当以全屏方式展示时。这可以利用如下所示:

QWindowsWindowFunctions::setHasBorderInFullScreen(tlwWindow->windowHandle(), true);
					

这将给予全屏窗口 1 像素边框,从而使其它顶层窗口能够出现在顶部。