此页面描述所需的库和环境,为 Qt for Windows .
下列第 3 方库可能被使用,当在 Windows 运行 Qt 5 应用程序时。
在编译时,
包括
and
lib
ICU 安装文件夹必须被追加到
INCLUDE
and
LIB
环境变量。运行时,需要找到 ICU DLL,通过把 DLL 拷贝到应用程序文件夹或通过添加
bin
ICU 安装文件夹到
PATH
环境变量。
SSL (安全套接字层) 通信支持的提供由 OpenSSL 工具包 ,必须单独获取。下载 Qt 所支持的最新版本的工具包。
Qt 可以按 3 种方式配置使用 OpenSSL:
Qt Network 加载 OpenSSL 库 DDL 当首次需要时,在运行时。若找不到,应用程序继续运行,但无法处理 SSL 通信。
所有官方 Qt 二进制构建均使用此配置。
首先在可执行文件目录下查找 OpenSSL 库,然后在 Windows System 目录中查找 (通常
C:\Windows\system32
),最后在所有目录中,列表于
PATH
环境变量。
若自己编译 Qt,可以配置 Qt 如何使用 OpenSSL 通过设置
-openssl
/
-openssl-runtime
or
-openssl-linked
configure flags.
若在正常编译器 include 和库目录下找不到 OpenSSL,可以设置
OPENSSL_PREFIX
,或
OPENSSL_INCDIR
and
OPENSSL_LIBDIR
configure arguments. If
OPENSSL_PREFIX
有设置,
OPENSSL_INCDIR
默认为
OPENSSL_PREFIX/include
and
OPENSSL_LIBDIR
to
OPENSSL_PREFIX/lib
.
可以微调要链接的实际库,通过设置
OPENSSL_LIBS
,
OPENSSL_LIBS_DEBUG
,和
OPENSSL_LIBS_RELEASE
configure arguments.
-openssl-runtime
configure argument. Qt will try to find
openssl/ssl.h
and
openssl/opensslv.h
in the default include path of the compiler. You can specify an additional include directory by setting
OPENSSL_INCDIR
.
例如:
configure -openssl-runtime OPENSSL_INCDIR="C:\Program Files\OpenSSL-Win64\include"
-openssl-linked
configure argument. Use the
OPENSSL_PREFIX
variable to let Qt correctly locate and build against your OpenSSL installation:
例如:
configure -openssl-linked OPENSSL_PREFIX="C:\Program Files\OpenSSL-Win64"
-openssl-linked
argument, and set
OPENSSL_PREFIX
,或
OPENSSL_INCDIR
and
OPENSSL_LIBDIR
。此外,可能需要设置
OPENSSL_LIBS
,
OPENSSL_LIBS_DEBUG
,
OPENSSL_LIBS_RELEASE
configure arguments to let Qt correctly link against your static build of the OpenSSL libraries.
例如:
set OPENSSL_DIR=C:\Program Files\OpenSSL-Win64 configure -openssl-linked OPENSSL_INCDIR="%OPENSSL_DIR%\include" OPENSSL_LIBDIR="%OPENSSL_DIR%\lib\VC\static" OPENSSL_LIBS="-lWs2_32 -lGdi32 -lAdvapi32 -lCrypt32 -lUser32" OPENSSL_LIBS_DEBUG="-llibssl64MDd -llibcrypto64MDd" OPENSSL_LIBS_RELEASE="-llibssl64MD -llibcrypto64MD"
见 SSL (安全套接字层) 类 了解带有 SSL 支持的 Qt 的进一步有关指导。
从 Qt 5.3 起,configure 默认不再链接 Qt Core 与 ICU 库。这大大减少了独立应用程序包的大小。
让 Qt Core 利用 ICU 库,拥有下列优点:
要在 Qt Core 明确启用 ICU 的使用,传递
-icu
to
configure
:
configure -icu
For Qt Quick 2 要工作,需要提供 OpenGL 2.1 或更高版本的图形驱动程序。来自 Windows 的默认驱动程序是 OpenGL 1.1。Qt 包括版本的 ANGLE project which is included from the Windows Qt installers. ANGLE implements the OpenGL ES 2.0 API on top of DirectX 11 or DirectX 9.
ANGLE 要求安装 DirectX SDK,当构建 Qt 时。若使用 MSVC,则 DirectX SDK 由 Windows SDK 提供。在这种情况下,至少需要 Windows SDK 10。对于 MinGW builds, you have to install the DirectX SDK provided by Microsoft.
ANGLE 会根据可用性选取渲染后端。但 DirectX 11 通常更可取。然而,某些图形卡可能对它支持不完整。对于这些情况,环境变量
QT_ANGLE_PLATFORM
(在 Qt 5.4 引入) 可用于控制渲染后端。可能的值
d3d11
,
d3d9
and
warp
.
要使用自定义版本的 ANGLE,设置
ANGLE_DIR
环境变量以指向 ANGLE 源树,在构建 Qt 之前。
若从硬件供应商那里安装了额外 OpenGL 驱动程序,则可能需要考虑使用此版本的 OpenGL,而不是 ANGLE。要使用 OpenGL,传递命令行选项
-opengl desktop
给 configure 脚本。
configure -opengl desktop
要使用 OpenGL ES 2.0 仿真程序而不是 ANGLE,使用 configure 选项:
-opengl es2 -no-angle
.
configure -opengl es2 -no-angle
除构建时配置外,Qt 还支持运行时挑选和加载 OpenGL 实现。要使用此模式,传递
-opengl dynamic
给 configure 脚本。
configure -opengl dynamic
注意: 从 Qt 5.5 起,这是 Qt 官方的、预构建的二进制包所使用的配置。强烈推荐在自定义构建中也使用它,尤其对于与应用程序一起部署的 Qt 二进制文件。
注意:
组合
-opengl dynamic
with
-static
也是可能的,注意:在这种情况下,ANGLE 不会被静态地链接到应用程序中,它仍然会被构建作为共享库。
这种配置最灵活,因为构建时未对 OpenGL 实现的依赖或假设进行硬编码。它允许健壮的应用程序部署。当给定环境无法提供正确的 OpenGL 2.0 实现时,它会自动退回到 ANGLE。这种回退对应用程序是完全透明的,并通过翻译成 Direct3D 允许 Qt Quick 或其它 OpenGL 代码到函数。譬如,回退可能发生在未安装其它图形驱动程序的 Windows 7 PC 上。在其它机器上,若有足够的 OpenGL 支持,则会使用正常桌面 OpenGL 驱动程序。此外,基于纯软件的 OpenGL 实现可能在未来用作额外回退,以允许没有 GPU 运行 Qt Quick 应用程序。
当配置采用
-opengl dynamic
,不管 Qt 还是应用程序构建使用
qmake
链接到 opengl32 (标准桌面 OpenGL) 或 QtANGLE 库。相反,会选取适当库在运行时。默认情况下,Qt 会确定系统的 opengl32.dll 是否提供 OpenGL 2 功能。若存在这些,则使用 opengl32.dll,否则将使用 ANGLE 库 (libEGL.dll 和 libGLESv2.dll)。若缺失 ANGLE 库或由于某种原因初始化失败,则尝试额外回退通过试着加载
opengl32sw.dll
。详见下文。
可以配置加载机制透过
QT_OPENGL
环境变量和以下应用程序属性:
Qt::AA_UseDesktopOpenGL
相当于设置
QT_OPENGL
to
desktop
.
Qt::AA_UseOpenGLES
相当于设置
QT_OPENGL
to
angle
.
Qt::AA_UseSoftwareOpenGL
相当于设置
QT_OPENGL
to
software
.
当明确请求某个配置时,不会进行任何校验在应用程序启动时,也就是说,将不审查系统提供的 opengl32.dll。
动态加载对包含本机 OpenGL 调用的应用程序有显著影响:它们可能无法链接由于
qmake
不再自动添加 opengl32.lib 或 libGLESv2.lib。相反,期望应用程序使用 OpenGL 函数凭借
QOpenGLFunctions
类。因此,直接 OpenGL 库依赖会被移除,且所有调用都将在运行期间被路由到 Qt 选取的实现。
要求某种 OpenGL 实现 (例如:桌面 OpenGL 由于依赖通过 OpenGL 3.0 或更高版本所提供的特征) 的应用程序,应设置应用程序属性
Qt::AA_UseOpenGLES
or
Qt::AA_UseDesktopOpenGL
再实例化
QGuiApplication
or
QApplication
。设置这些属性后,将不考虑其它 OpenGL 实现。此外,若它们愿意,通过将 opengl32.lib 添加到其 .pro 工程文件,以自由直接调用 OpenGL 函数:
LIBS += opengl32.lib
(Visual Studio) 或
LIBS += -lopengl32
(
MinGW
)。从应用程序视角,结果相当于
-opengl desktop
Qt 构建配置。
Qt::AA_UseSoftwareOpenGL
的特殊之处是它会试着采用非标准名称来加载 OpenGL 实现。默认名称为
opengl32sw.dll
。这允许随附仅软件 OpenGL 实现,例如构建
Mesa 采用 llvmpipe
,在此名称下。若有必要,可以覆盖文件名通过设置
QT_OPENGL_DLL
环境变量。
根据图形卡和驱动程序版本,提供 JSON 格式配置文件以指定要使用哪种 OpenGL 实现是可能的。位置的给定通过环境变量
QT_OPENGL_BUGLIST
。相对路径的解析使用
QLibraryInfo::SettingsPath
or
QStandardPaths::ConfigLocation
。文件利用驱动程序 Bug 列表所使用的格式,在
Chromium 工程
。它由条目的列表组成,各条目指定一组条件和特征关键词的列表。通常,使用设备 ID 和供应商 ID 相匹配的特定图形卡。可以找到它们,在输出的
qtdiag
or
dxdiag
工具。
以下特征关键词与选取 OpenGL 实现相关:
disable_desktopgl
- 禁用 OpenGL。这确保 Qt 不会试图使用常规 OpenGL (opengl32.dll),且它会采用 ANGLE 立即开始。这对阻止坏的 OpenGL 驱动程序崩溃应用程序,很有用。
disable_angle
- 禁用 ANGLE。确保 Qt 不会试图使用 ANGLE (及 Direct3D)。
disable_d3d11
- 禁用 ANGLE 中的 D3D11 光栅化器。相反,会首先尝试下一 D3D 渲染选项。默认次序:D3D11、D3D9、WARP、参考实现。
disable_d3d9
- 禁用 ANGLE 中的 D3D9 光栅化器
disable_rotation
- 强制应用程序始终以横向取向运行。它仅适用于 OpenGGL,且不起作用当使用 ANGLE 或软件 OpenGL 实现时。这旨在为具有旋转问题的驱动程序。该特征关键词在 QT 5.6 引入。
disable_program_cache
- 禁用存储在磁盘上的着色器程序二进制文件。该特征关键词在 QT 5.12 引入。
样本文件看起来像:
{ "entries": [ { "id": 1, "description": "Disable D3D11 on older nVidia drivers", "os": { "type": "win" }, "vendor_id": "0x10de", "device_id": ["0x0DE9"], "driver_version": { "op": "<=", "value": "8.17.12.6973" }, "features": [ "disable_d3d11" ] }, ...
当
QT_OPENGL_BUGLIST
未指定,将使用内置列表。这通常包括一些较旧的、功能较差图形卡采用
disable_desktopgl
设置,为阻止 Qt 使用不稳定的桌面 OpenGL 实现,而不是立即回退到 ANGLE。
在实践中,最常见组合期望如下:
disable_desktopgl
- 若系统提供 OpenGL 2.0 或更新版本,但已知驱动程序不稳定且易于崩溃。
disable_desktopgl
,disable_angle - 当不期望加速路径时。这确保 Qt 唯一尝试的选项是软件光栅化器 (opengl32sw.dll)。当部署在广泛旧系统上的虚拟机和应用程序中时,是有用的。
disable_d3d11
,disable_d3d9 - 当已知加速 D3D 选项不稳定,且期望 WARP 时 (当可用时)。在虚拟机中,是有用的。
匹配给定卡 (或驱动程序) 的支持键,如下。注意:其中一些是 Qt 特有的。
os.type
- 操作系统:
win
,
linux
,
macosx
,
android
os.version
- 内核版本
os.release
- 指定 Windows 操作系统发行列表:
xp
,
vista
,
7
,
8
,
8.1
,
10
.
vendor_id
- 来自适配器标识符的供应商
device_id
- PCI 设备 ID 列表。
driver_version
- 来自适配器标识符的驱动程序版本
driver_description
- 匹配,当值是来自适配器标识符的驱动程序所描述的子字符串时
gl_vendor
- 匹配,当值是子字符串对于
GL_VENDOR
string
要禁用所有黑名单,设置环境变量
QT_NO_OPENGL_BUGLIST
为任意值。这会跳过读取任何配置文件,且假定未禁用任何内容,不管是驱动程序还是 OS。
注意:
虽然通常不需要,
QT_NO_OPENGL_BUGLIST
can become relevant in certain virtualized environments, with multiple, possibly virtual, graphics adapters present. If the logs from categories like qt.qpa.gl indicate that the detection of the driver and display adapter leads to incorrectly disabling OpenGL, it is then recommended to set this environment variable in order to enable the application to run normally. This environment variable was introduced in Qt 5.15.
这些工具是运行 Qt 5 应用程序所不需要的,但从源代码构建 Qt 5 则需要它们。
PATH
.
PATH
.
ANGLE 取决于这些额外工具来自 GnuWin32 and Win flex-bison 工程,为提供方便在 gnuwin32/bin 文件夹:
The
gnuwin32/bin
文件夹应被添加到
PATH
变量。
注意: 若要在 qt5.git 之外构建 qtbase,需要下载 win_bison and win_flex 从以上链接并将它们重命名为 bison and flex .
有关从源代码构建 Qt 5 的指导,请阅读 Qt for Windows - 从源代码构建 页面。
可以构建 Qt 采用 Visual Studio 2015 (Update 2)、Visual Studio 2017、Visual Studio 2019 及 Build Tools for Visual Studio 2017 和 2019 (另请参阅 支持平台 ).
Qt 已成功通过测试,采用:
最低版本的 MinGW 所支持的构建是 GCC 5.1.0 ( 64bit , 32bit ),可获取自其 下载页面 .
更多信息有关 MinGW 构建,拜访 参考配置 章节的 支持平台 页面。
Qt 已通过 Clang 3.8 (llvm svn 修订版256453 和 clang svn 修订版 256453) 成功测试。使用 Visual Studio 2015 Update 1 构建 clang。Mkspec 使用 clang-cl 工具来构建 Qt。Clang 3.8 不支持预编译头文件。
Qt WebEngine 拥有的其它构建要求列表于 Qt WebEngine 平台注意事项 .
从 v5.11 起, QDoc uses Clang to parse C++ code. If you wish to build QDoc manually, refer to 为 QDoc 安装 Clang 对于特定构建要求。
另请参阅 QDoc 依赖 .