Qt for Windows - 要求

此页面描述所需的库和环境,为 Qt for Windows .

下列第 3 方库可能被使用,当在 Windows 运行 Qt 5 应用程序时。

  • OpenSSL 工具包 :Qt 可以使用 OpenSSL 以支持 SSL (安全套接字层) 通信。
  • ICU :Qt 5 可以使用 ICU 库,增强 UNICODE 和全球化支持 (见 QTextCodec , QCollator::setNumericMode ()).

    在编译时, 包括 and lib ICU 安装文件夹必须被追加到 INCLUDE and LIB 环境变量。运行时,需要找到 ICU DLL,通过把 DLL 拷贝到应用程序文件夹或通过添加 bin ICU 安装文件夹到 PATH 环境变量。

  • ANGLE :该库把 OpenGL ES 2.0 API 调用转换成 DirectX 11 或 DirectX 9 调用 (取决于可用性),从而无需在目标机器上安装图形驱动程序。

SSL

SSL (安全套接字层) 通信支持的提供由 OpenSSL 工具包 ,必须单独获取。下载 Qt 所支持的最新版本的工具包。

Qt 可以按 3 种方式配置使用 OpenSSL:

  • Qt Network 加载 OpenSSL 库 DDL 当首次需要时,在运行时。若找不到,应用程序继续运行,但无法处理 SSL 通信。

    所有官方 Qt 二进制构建均使用此配置。

    首先在可执行文件目录下查找 OpenSSL 库,然后在 Windows System 目录中查找 (通常 C:\Windows\system32 ),最后在所有目录中,列表于 PATH 环境变量。

  • Qt Network 链接到OpenSSL 库。若在加载时找不到它们,应用程序无法启动。
  • Qt Network 针对静态版本的 OpenSSL 库进行编译,且 OpenSSL 变为 Qt5Network 库的一部分。

若自己编译 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,设置 -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"
    					
  • 要链接 Qt Network 到 OpenSSL 库,设置 -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"
    					
  • 要链接 Qt Network 到静态版本的 OpenSSL 库,设置 -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 的进一步有关指导。

ICU

从 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 则需要它们。

  • Perl - Install a recent version of perl (for instance ( Strawberry Perl ) 并将安装位置添加到您的 PATH .
  • Python - 安装 Python 从 here and add the installation location to your 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 - 从源代码构建 页面。

编译器

Visual Studio

可以构建 Qt 采用 Visual Studio 2015 (Update 2)、Visual Studio 2017、Visual Studio 2019 及 Build Tools for Visual Studio 2017 和 2019 (另请参阅 支持平台 ).

Intel C++ 编译器 (Windows, Altix)

Qt 已成功通过测试,采用:

  • Windows - 适于 32 位应用程序的 Intel(R) C++ 编译器,版本 9.1.040。
  • Altix - 适于基于 Itanium(R) 的应用程序的 Intel(R) C++ Itanium(R) 编译器,版本 8.1 构建 20050406 包 ID:l_cc_pc_8.1.030

GCC (MinGW-builds)

最低版本的 MinGW 所支持的构建是 GCC 5.1.0 ( 64bit , 32bit ),可获取自其 下载页面 .

更多信息有关 MinGW 构建,拜访 参考配置 章节的 支持平台 页面。

Clang(clang-cl)

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 拥有的其它构建要求列表于 Qt WebEngine 平台注意事项 .

QDoc 依赖

从 v5.11 起, QDoc uses Clang to parse C++ code. If you wish to build QDoc manually, refer to 为 QDoc 安装 Clang 对于特定构建要求。

另请参阅 QDoc 依赖 .

内容

版权所有  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1