Qt for Windows - 具体问题

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

安装位置

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

c:\program.obj not found
					

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

可能的 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 像素边框,从而使其它顶层窗口能够出现在顶部。