Qt для Windows — Требования
Эта страница описывает необходимые библиотеки и среду для Qt для Windows.
Библиотеки
При запуске приложений Qt 5 в Windows могут использоваться следующие сторонние библиотеки.
- Набор инструментов OpenSSL: Qt может использовать OpenSSL для поддержки Secure Socket Layer (SSL) связи.
-
ICU: Qt 5 может использовать библиотеку ICU для улучшенной поддержки UNICODE и глобализации (см. QTextCodec, QCollator::setNumericMode()).
Во время компиляции папки include и lib установки ICU необходимо добавить в переменные среды
INCLUDEиLIB. Во время выполнения DLL ICU необходимо найти, скопировав DLL в папку приложения или добавив папку bin установки ICU в переменную средыPATH. - ANGLE: Эта библиотека преобразует вызовы API OpenGL ES 2.0 в вызовы DirectX 11 или DirectX 9 (в зависимости от доступности), устраняя необходимость установки графических драйверов на целевых машинах.
SSL
Поддержка Secure Sockets Layer (SSL) связи обеспечивается набором инструментов OpenSSL Toolkit, который необходимо получить отдельно. Загрузите последнюю поддерживаемую Qt версию набора инструментов.
Qt можно настроить для использования OpenSSL тремя способами:
- Qt Network загружает библиотеки OpenSSL (DLL) при первой необходимости во время выполнения. Если они не найдены, приложение продолжает работать, но не может обработать SSL-связь.
Все официальные двоичные сборки Qt используют эту конфигурацию.
Библиотеки OpenSSL сначала ищутся в каталоге исполняемого файла, затем в каталоге Windows System (обычно
C:\Windows\system32), а затем во всех каталогах, перечисленных в переменной средыPATH. - Qt Network связывается с библиотеками OpenSSL. Если они не найдены во время загрузки, приложение не запускается.
- Qt Network компилируется с использованием статической версии библиотек OpenSSL, и OpenSSL становится частью библиотеки Qt5Network.
Если вы компилируете Qt самостоятельно, вы можете настроить, как Qt использует OpenSSL, установив флаги конфигурации -openssl / -openssl-runtime или -openssl-linked.
Если OpenSSL не найден в обычных каталогах заголовков и библиотек компилятора, вы можете установить аргументы конфигурации OPENSSL_PREFIX, или OPENSSL_INCDIR и OPENSSL_LIBDIR. Если установлен OPENSSL_PREFIX, OPENSSL_INCDIR по умолчанию устанавливается в OPENSSL_PREFIX/include, а OPENSSL_LIBDIR в OPENSSL_PREFIX/lib.
Фактические библиотеки для связи можно настроить, установив аргументы конфигурации OPENSSL_LIBS, OPENSSL_LIBS_DEBUG и OPENSSL_LIBS_RELEASE.
- Для загрузки OpenSSL во время выполнения установите аргумент конфигурации
-openssl-runtime. Qt попытается найтиopenssl/ssl.hиopenssl/opensslv.hв стандартном пути включения компилятора. Вы можете указать дополнительный каталог заголовков, установивOPENSSL_INCDIR.Например:
configure -openssl-runtime OPENSSL_INCDIR="C:\Program Files\OpenSSL-Win64\include"
- Для связи Qt Network с библиотеками OpenSSL установите аргумент конфигурации
-openssl-linked. Используйте переменнуюOPENSSL_PREFIX, чтобы Qt правильно обнаружил и скомпилировал вашу установку OpenSSL:Например:
configure -openssl-linked OPENSSL_PREFIX="C:\Program Files\OpenSSL-Win64"
- Для связи Qt Network со статической версией библиотек OpenSSL установите аргумент
-openssl-linked, и установитеOPENSSL_PREFIX, илиOPENSSL_INCDIRиOPENSSL_LIBDIR. Кроме того, вам, вероятно, нужно будет установить аргументы конфигурацииOPENSSL_LIBS,OPENSSL_LIBS_DEBUGиOPENSSL_LIBS_RELEASE, чтобы Qt правильно связался со вашей статической сборкой библиотек OpenSSL.Например:
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"
См. Классы Secure Sockets Layer (SSL) для получения дополнительных инструкций по Qt с поддержкой SSL.
ICU
Начиная с Qt 5.3 и далее, конфигурация по умолчанию больше не связывает Qt Core с библиотеками ICU. Это значительно уменьшает размер автономного пакета приложения.
Использование библиотек ICU в Qt Core имеет следующие преимущества:
- Поведение более соответствует другим платформам.
- Расширенный набор кодировок текста (см. QTextCodec).
- QLocale::toUpper() и QLocale::toLower() всегда используют правила преобразования регистра, специфичные для региональных параметров.
- QCollator::setNumericMode() работает последовательно на всех версиях Windows.
Чтобы явно включить использование ICU в Qt Core, передайте -icu в configure:
configure -icu
Графические драйверы
Для работы Qt Quick 2 требуется графический драйвер, обеспечивающий OpenGL 2.1 или выше. По умолчанию драйвер Windows — OpenGL 1.1. Qt включает версию проекта ANGLE, которая включена в установщики Qt для Windows. ANGLE реализует API OpenGL ES 2.0 поверх DirectX 11 или DirectX 9.
ANGLE требует установки DirectX SDK при построении Qt. Если используется MSVC, DirectX SDK предоставляется Windows SDK. В этом случае вам потребуется как минимум Windows SDK 10. Для сборок MinGW необходимо установить DirectX SDK, предоставляемый Microsoft.
ANGLE выбирает бэкэнд отрисовки в зависимости от доступности. DirectX 11 обычно предпочтительнее. Однако некоторые графические карты могут его не полностью поддерживать. В таких случаях можно использовать переменную среды QT_ANGLE_PLATFORM (введена в Qt 5.4) для управления бэкэндом отрисовки. Возможные значения — d3d11, d3d9 и warp.
Чтобы использовать пользовательскую версию ANGLE, установите переменную среды ANGLE_DIR для указания дерева исходного кода ANGLE перед построением Qt.
Если вы установили дополнительные графические драйверы от вашего поставщика оборудования, то вы можете использовать эту версию OpenGL вместо ANGLE. Чтобы использовать OpenGL, передайте командные строки -opengl desktop в скрипт конфигурации.
configure -opengl desktop
Чтобы использовать эмулятор OpenGL ES 2.0 вместо ANGLE, используйте параметры конфигурации: -opengl es2 -no-angle.
configure -opengl es2 -no-angle
Динамическая загрузка графических драйверов
В дополнение к конфигурации во время компиляции Qt поддерживает выбор и загрузку реализации OpenGL во время выполнения. Чтобы использовать этот режим, передайте -opengl dynamic в скрипт конфигурации.
configure -opengl dynamic
Примечание: Начиная с Qt 5.5, это конфигурация, используемая официальными предварительно скомпилированными двоичными пакетами Qt. Сильно рекомендуется использовать её также при создании собственных сборок, особенно для двоичных файлов Qt, которые развертываются вместе с приложениями.
Примечание: Также возможно комбинирование -opengl dynamic с -static, но имейте в виду, что ANGLE в этом случае не будет статически связан с приложениями, он по-прежнему будет создан как общая библиотека.
Эта конфигурация является наиболее гибкой, поскольку никакие зависимости или предположения об реализации OpenGL не жестко запрограммированы на этапе компиляции. Это позволяет создавать надежные приложения. Если данная среда не предоставляет надлежащей реализации OpenGL 2.0, она автоматически переключится на ANGLE. Это будет полностью прозрачно для приложения и позволит Qt Quick или другому коду OpenGL работать, переводя его в Direct3D. Такой сбой, например, может произойти на компьютере Windows 7 без дополнительных графических драйверов. На других машинах, где есть достаточная поддержка OpenGL, будут использоваться стандартные графические драйверы. Кроме того, в будущем могут быть доступны чисто программные реализации OpenGL в качестве дополнительных резервных вариантов, что позволит запускать приложения 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вdesktop. -
Qt::AA_UseOpenGLESЭквивалентно установкеQT_OPENGLвangle. -
Qt::AA_UseSoftwareOpenGLЭквивалентно установкеQT_OPENGLвsoftware.
Когда определенная конфигурация запрашивается явно, во время запуска приложения никаких проверок не производится, то есть система opengl32.dll не будет проверяться.
Динамическая загрузка оказывает существенное влияние на приложения, содержащие нативные вызовы OpenGL: они могут не связаться, так как qmake больше не автоматически добавляет opengl32.lib или libGLESv2.lib. Вместо этого приложения должны использовать функции OpenGL через класс QOpenGLFunctions. Таким образом, прямая зависимость от библиотеки OpenGL устраняется, и все вызовы будут перенаправлены во время выполнения на реализацию, выбранную Qt.
Приложения, которые требуют определённой реализации OpenGL (например, настольного OpenGL из-за использования функций OpenGL 3.0 или выше) должны установить атрибуты приложения Qt::AA_UseOpenGLES или Qt::AA_UseDesktopOpenGL до создания экземпляра QGuiApplication или QApplication. При установке этих атрибутов другие реализации OpenGL не рассматриваются. Кроме того, если они захотят, такие приложения могут выполнять прямые вызовы функций OpenGL, добавив opengl32.lib в свои файлы проекта .pro: 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 или QStandardPaths::ConfigLocation. Файл использует формат списка ошибок драйвера, используемого в проектах Chromium. Он состоит из списка записей, каждая из которых определяет набор условий и список ключевых слов функций. Обычно для сопоставления конкретной видеокарты используются идентификаторы устройства и производителя. Их можно найти в выводе инструмента qtdiag или dxdiag.
Следующие ключевые слова функций имеют значение для выбора реализации OpenGL:
-
disable_desktopgl— Отключает OpenGL. Это гарантирует, что Qt не попытается использовать обычный OpenGL (opengl32.dll) и сразу же начнёт работу с ANGLE. Это полезно для предотвращения аварий приложения из-за плохих драйверов OpenGL. -
disable_angle— Отключает ANGLE. Гарантирует, что Qt не попытается использовать ANGLE (и, следовательно, Direct3D). -
disable_d3d11— Отключает растризатор D3D11 в ANGLE. Вместо этого сначала будет опробована следующая опция рендеринга D3D. Стандартный порядок: D3D11, D3D9, WARP, справочная реализация. -
disable_d3d9— Отключает растризатор D3D9 в ANGLE. -
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. -
driver_version— Версия драйвера из идентификатора адаптера -
driver_description— Сопоставляет, когда значение является подстрокой описания драйвера из идентификатора адаптера -
gl_vendor— Сопоставляет, когда значение является подстрокой строкиGL_VENDOR
Чтобы отключить весь чёрный список, установите переменную среды QT_NO_OPENGL_BUGLIST в любое значение. Это пропустит чтение любых файлов конфигурации и вместо этого предположит, что ничего не отключено, независимо от драйвера или ОС.
Примечание: Хотя это обычно не требуется, QT_NO_OPENGL_BUGLIST может стать актуальным в некоторых виртуализированных средах, где присутствует несколько, возможно виртуальных, графических адаптеров. Если в логах из категорий, таких как qt.qpa.gl, указывается, что обнаружение драйвера и графического адаптера приводит к неверному отключению OpenGL, рекомендуется установить эту переменную среды, чтобы приложение работало нормально. Эта переменная среды была добавлена в Qt 5.15.
Создание из исходного кода
Эти инструменты не нужны для запуска приложений Qt 5, но они необходимы для создания Qt 5 из исходного кода.
-
ActivePerl — Установите последнюю версию ActivePerl (страница загрузки) и добавьте путь к установке в
PATH. - Python — Установите Python с данной страницы и добавьте путь к установке в
PATH.
Примечание: Пожалуйста, убедитесь, что исполняемый файл perl из ActivePerl находится в пути перед исполняемым файлом perl, предоставленным msysgit, так как последний устарел.
ANGLE зависит от этих дополнительных инструментов из проектов GnuWin32 и Win flex-bison, которые предоставляются для удобства в папке gnuwin32/bin:
Папка gnuwin32/bin должна быть добавлена в переменную PATH.
Примечание: Если вы создаёте qtbase вне qt5.git, вам потребуется скачать win_bison и win_flex по ссылке выше и переименовать их в bison и flex.
Для получения инструкций по созданию исходного кода Qt 5, прочитайте страницу Qt для Windows — Создание из исходного кода.
Компиляторы
Visual Studio
Qt можно создать с помощью Visual Studio 2015 (Update 2), Visual Studio 2017, Visual Studio 2019 и Build Tools для Visual Studio 2017 и 2019 (см. также Поддерживаемые платформы).
Intel C++ Компилятор (Windows, Altix)
Qt был успешно протестирован с:
- Windows — Intel(R) C++ Компилятор для 32-битных приложений, Версия 9.1.040.
- Altix — Intel(R) C++ Itanium(R) Компилятор для приложений на базе Itanium(R) Версия 8.1 Build 20050406 ID пакета: l_cc_pc_8.1.030
GCC (MinGW-сборки)
Минимальная поддерживаемая версия MinGW-сборок — GCC 5.1.0 (64-битная, 32-битная), доступная на его странице загрузки.
Дополнительную информацию о MinGW-сборках можно найти в разделе «Справочная конфигурация» страницы поддерживаемых платформ.
Clang(clang-cl)
Qt был успешно протестирован с Clang 3.8 (llvm svn rev. 256453 и clang svn rev. 256453). Для сборки clang использовалась Visual Studio 2015 Update 1. Mkspec использует инструмент clang-cl для сборки Qt. Clang 3.8 не поддерживает предварительно скомпилированные заголовки.
Создание Qt WebEngine
Qt WebEngine имеет дополнительные требования к сборке, которые перечислены в Заметки к платформе Qt WebEngine.
Зависимости QDoc
Начиная с версии 5.11, QDoc использует Clang для анализа кода C++. Если вы хотите вручную создать QDoc, обратитесь к Установка Clang для QDoc для получения конкретных требований к сборке.
См. также Зависимости QDoc.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/windows-requirements.html