Qt для Windows — Требования
На этой странице описаны необходимые библиотеки и среда для Qt для Windows.
Библиотеки
При работе с приложениями Qt 5 на Windows могут использоваться следующие сторонние библиотеки.
- Набор инструментов OpenSSL: Qt может использовать OpenSSL для поддержки SSL-соединений.
-
ICU: Qt 5 может использовать библиотеку ICU для улучшенной поддержки UNICODE и глобализации (см. QTextCodec, QCollator::setNumericMode()).
Во время компиляции папки include и lib установки ICU необходимо добавить в переменные среды
INCLUDEиLIB. Во время выполнения приложения DLL-файлы ICU должны быть доступны, либо скопированы в папку приложения, либо папка bin установки ICU должна быть добавлена в переменную средыPATH. - ANGLE: Эта библиотека конвертирует вызовы OpenGL ES 2.0 в вызовы DirectX 11 или DirectX 9 (в зависимости от доступности), что исключает необходимость установки графических драйверов на целевых машинах.
SSL
Поддержка Secure Sockets Layer (SSL) обеспечивается набором инструментов OpenSSL, который необходимо получить отдельно. Скачайте последнюю поддерживаемую Qt версию набора инструментов.
Qt может быть настроен для использования OpenSSL тремя способами:
- Qt Network загружает библиотеки OpenSSL (DLL) при первой необходимости, во время выполнения. Если они не найдены, приложение продолжает работу, но не сможет обрабатывать SSL-соединения.
Все официальные двоичные сборки Qt используют эту конфигурацию.
Библиотеки OpenSSL ищутся сначала в каталоге исполняемого файла, затем в системном каталоге Windows (обычно
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.
Для компиляции Qt требуется установка DirectX SDK. Если используется 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.
Пример файла выглядит так:
{
"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 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 и Build Tools для Visual Studio 2017 (см. также Поддерживаемые платформы).
Компилятор 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, идентификатор пакета: 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.14/windows-requirements.html