Заметки по платформе Qt WebEngine
Компиляция Qt WebEngine из исходного кода
Статические сборки не поддерживаются.
Требования к сборке модулей Qt 5 из исходного кода перечислены отдельно для каждой поддерживаемой платформы:
Кроме того, для сборки модуля Qt WebEngine требуются следующие инструменты:
Тесты для пропуска сборки Qt WebEngine находятся в репозитории qtwebengine в подкаталоге tools\qmake\mkspecs. Их можно найти, выполнив поиск по запросу skipBuild.
Все платформы
На всех платформах требуются следующие инструменты:
- Python 2.7.5 или более поздней версии. Python 3 не поддерживается.
- Bison, Flex
- GPerf
Windows
В Windows требуются следующие дополнительные инструменты:
- Visual Studio 2017 версии 15.8 или более поздней
- Active Template Library (ATL), обычно включенная в установку Visual Studio
- Windows 10 SDK версии 10.0.18362 или более поздней
Qt WebEngine можно скомпилировать только в 64-разрядной версии Windows с x64-битной средой разработки. Для создания Qt WebEngine для 32-разрядных приложений вам необходимо настроить и скомпилировать Qt с помощью Visual Studio 2017 x64 в x86 кросс-компилятором. Настроить эту цепочку инструментов можно в командной строке, выполнив vcvarsall.bat amd64_x86.
Linux
В Linux требуется Clang или GCC версии 5 или более поздней. Поддерживаемые конфигурации: linux-g++ и linux-clang.
Qt WebEngine требует pkg-config, чтобы обнаружить большинство своих зависимостей. Необходимы следующие файлы pkg-config:
dbus-1fontconfig
Если Qt был настроен для xcb, также требуются следующие файлы pkg-config:
libdrmxcompositexcursorxixrandrxscrnsaverxtst
Кроме того, необходимо установить пакеты разработки для khr и libcap.
macOS
Для macOS требуется следующее:
- macOS 10.12 или более поздняя версия
- Xcode 8.3.3 или более поздняя версия
- macOS 10.12 SDK или более поздняя версия
Примечание: Qt WebEngine нельзя скомпилировать для 32-битного режима macOS (используя macx-clang-32 mkspec).
Использование более ранних версий Qt для компиляции Qt WebEngine
Поддерживается компиляция Qt WebEngine с более ранними версиями Qt (вплоть до последней LTS версии). Это означает, что Qt WebEngine 5.11 можно скомпилировать с Qt 5.9.x, Qt 5.10.x и Qt 5.11.
Для использования более ранней версии Qt для компиляции Qt Webengine:
- Загрузите исходный код qtwebengine.
- Из более ранней версии Qt выполните
qmake && make (&& make install).
Совместимость с Mac App Store
Приложения, использующие Qt WebEngine, несовместимы с Mac App Store, поскольку:
- Часть кода Chromium использует несколько закрытых методов API, что запрещено App Store.
- Приложения, отправляемые в App Store, должны быть подписаны кодом с включенным App Sandbox. App Sandbox конфликтует с собственной инициализацией sandboxing в Chromium, что приводит к неправильной инициализации Chromium. Это также связано с использованием закрытых API. Более того, автономный Chromium сам по себе не тестируется официально с включенным App Sandbox, и даже если будут предприняты усилия для обхода ограничений App Store, это не гарантирует правильную работу библиотеки.
Поддержка AirPlay на macOS на MacBook с двумя графическими процессорами
Для правильной работы Qt WebEngine при потоковой передаче на AppleTV с MacBook, поддерживающим переключение графических процессоров, необходимо добавить параметр NSSupportsAutomaticGraphicsSwitching в файл Info.plist приложения со значением YES. В противном случае могут возникнуть проблемы с отрисовкой при создании новых экземпляров веб-виджетов после включения или выключения AirPlay.
Поддержка профиля OpenGL для QSurfaceFormat по умолчанию
Если необходимо установить новый профиль OpenGL для QSurfaceFormat по умолчанию, это следует сделать до объявления экземпляра приложения, чтобы убедиться, что все созданные контексты OpenGL используют один и тот же профиль OpenGL.
На macOS, если QSurfaceFormat по умолчанию устанавливается после экземпляра приложения, приложение завершит работу с функцией qFatal() и выведет сообщение, что QSurfaceFormat по умолчанию следует устанавливать до объявления экземпляра приложения.
Поддержка sandboxing
Qt WebEngine предоставляет встроенную поддержку sandboxing для процессов отрисовки Chromium.
В Linux обратите внимание на следующие ограничения:
- Ядро должно поддерживать функцию анонимных пространств (версия ядра 3.8 или более поздняя). Однако в Debian, Ubuntu и других дистрибутивах, основанных на Debian, эта функция отключена по умолчанию. Ее можно включить, установив
/proc/sys/kernel/unprivileged_userns_cloneв 1. - Ядро должно поддерживать функцию
seccomp-bpf(версия ядра 3.5 или более поздняя). - Sandboxes с setuid не поддерживаются и, следовательно, отключены.
Для явного отключения sandboxing используйте один из следующих вариантов:
- Установите переменную среды
QTWEBENGINE_DISABLE_SANDBOXв значение 1. - Передайте параметр командной строки
--no-sandboxисполняемому файлу приложения пользователя. - Установите
QTWEBENGINE_CHROMIUM_FLAGSв--no-sandbox.
Дополнительную информацию можно найти в разделе Использование аргументов командной строки.
Доступность и производительность
Qt WebEngine включает поддержку доступности веб-страниц при соблюдении следующих условий:
- Qt Core настроен и скомпилирован с поддержкой доступности.
- Плагин QPA получает уведомление от операционной системы о том, что доступность должна быть активирована. Это происходит, например, при использовании программы чтения с экрана в Windows или VoiceOver в macOS.
Из-за некоторых ограничений плагин QPA Linux почти всегда сообщает, что доступность должна быть активирована. На больших веб-страницах это может привести к значительному замедлению скорости отрисовки.
Поэтому в Qt 5.9 и более поздних версиях поддержка доступности Qt WebEngine по умолчанию отключена в Linux. Ее можно включить, установив переменную среды QTWEBENGINE_ENABLE_LINUX_ACCESSIBILITY в ненулевое значение.
Поп-апы в приложениях полноэкранного режима в Windows
Из-за ограничения в Windows-комповитере приложения, которые отображают полноэкранный веб-визуализатор, не будут корректно отображать всплывающие окна или другие окна верхнего уровня. Причину и решение проблемы можно найти в Полноэкранные окна OpenGL и QWindowsWindowFunctions::setHasBorderInFullScreen.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qtwebengine-platform-notes.html