Qt for Windows - 要求

此頁麵描述所需的庫和環境,為 Qt for Windows .

下列第 3 方庫可能被使用,當在 Windows 運行 Qt 5 應用程序時。

  • 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 (安全套接字層) 通信支持的提供由 OpenSSL 工具包 , which must be obtained separately. See SSL (安全套接字層) 類 for instructions on building Qt with SSL support.

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 引入。

樣本文件看起來像:

{
"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 5 應用程序所不需要的,但從源代碼構建 Qt 5 則需要它們。

注意: 請確保 perl 可執行文件來自 ActivePerl 在由 msysgit 提供 perl 可執行文件之前的路徑中可以找到,因為後者已過時。

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 can be built with Visual Studio 2015 (Update 2), Visual Studio 2017, and Build Tools for Visual Studio 2017 (see also 支持平颱 ).

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 -builds supported is GCC 4.9.1 ( 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 依賴 .