Заметки по платформе 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 с 64-битным инструментарием. Для сборки Qt WebEngine для 32-битных приложений необходимо настроить и скомпилировать Qt с использованием кросс-компилятора Visual Studio 2017 x64 в x86. Этот инструментарий можно настроить в командной строке, выполнив vcvarsall.bat amd64_x86.
Linux
На Linux требуется Clang или GCC версии 5 или более поздней. Поддерживаемые конфигурации — linux-g++, linux-clang и linux-clang-libc++.
Qt WebEngine требует pkg-config для обнаружения большинства зависимостей. Требуются следующие файлы pkg-config:
dbus-1fontconfig
Если Qt был настроен для xcb, также потребуются следующие файлы pkg-config:
libdrmxcompositexcursorxixrandrxscrnsaverxtst
Кроме того, необходимо установить пакеты разработки для khr и libcap.
macOS
На macOS требуются следующие компоненты:
- macOS 10.13 или более поздняя версия
- Xcode 10.0 или более поздняя версия
- macOS 10.13 SDK или более поздняя версия
Примечание: Qt WebEngine не может быть собран для 32-битного режима macOS (используя macx-clang-32 mkspec).
Использование более ранних версий Qt для сборки Qt WebEngine
Поддерживается сборка Qt WebEngine с более ранними версиями Qt (вплоть до последней LTS-версии). Это означает, что Qt WebEngine 5.15 можно собрать с Qt 5.12.x, Qt 5.14.x и Qt 5.15.
Чтобы использовать более раннюю версию 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 вмешивается в инициализацию собственной песочницы Chromium, что приводит к неправильной инициализации Chromium. Это также связано с использованием закрытых API. Кроме того, отдельный Chromium официально не тестируется с включенной функцией App Sandbox, и даже если будут предприняты попытки обойти ограничения App Store, это не гарантирует правильной работы библиотеки.
Поддержка AirPlay на MacBook с двумя графическими процессорами
Для корректной работы Qt WebEngine при потоковой передаче на AppleTV с MacBook, поддерживающим переключение графических процессоров, необходимо добавить опцию NSSupportsAutomaticGraphicsSwitching в файл Info.plist приложения со значением YES. В противном случае могут возникнуть проблемы с рендерингом при создании новых экземпляров просмотра веб-движка после включения или выключения AirPlay.
Поддержка стандартного профиля OpenGL для QSurfaceFormat
Если необходимо задать новый стандартный QSurfaceFormat с изменённым профилем OpenGL, его следует установить до объявления экземпляра приложения, чтобы убедиться, что все созданные контексты OpenGL используют один и тот же профиль OpenGL.
На macOS, если стандартный QSurfaceFormat устанавливается после экземпляра приложения, приложение завершится с вызовом qFatal() и выведет сообщение о том, что стандартный QSurfaceFormat должен быть установлен до объявления экземпляра приложения.
Поддержка песочницы
Qt WebEngine предоставляет встроенную поддержку песочницы для процессов рендеринга Chromium.
На Linux обратите внимание на следующие ограничения:
- Ядро должно поддерживать функцию анонимных пространств (версия ядра 3.8 или более поздняя). Однако на Debian, Ubuntu и других дистрибутивах на основе Debian эта функция по умолчанию выключена. Её можно включить, установив
/proc/sys/kernel/unprivileged_userns_cloneв 1. - Ядро должно поддерживать функцию
seccomp-bpf(версия ядра 3.5 или более поздняя). - Песочницы setuid не поддерживаются и, следовательно, отключены.
Чтобы явно отключить песочницу, используйте один из следующих вариантов:
- Установите переменную среды
QTWEBENGINE_DISABLE_SANDBOXв значение 1. - Передайте аргумент командной строки
--no-sandboxисполняемому файлу приложения пользователя. - Установите
QTWEBENGINE_CHROMIUM_FLAGSв значение--no-sandbox.
Дополнительную информацию см. в разделе Использование аргументов командной строки.
Требования к памяти в среде Docker
При запуске примеров Qt Web Engine в контейнере Docker и просмотре веб-страниц с большим объёмом контента могут появляться ошибки BUS (SIGBUS). Как правило, это связано с тем, что Docker запускает контейнер с недостаточным объёмом памяти (например, 64 МБ). Для решения этой проблемы увеличьте размер выделенной памяти.
Доступность и производительность
Qt WebEngine обеспечивает поддержку доступности веб-страниц при соблюдении следующих условий:
- Qt Core настроен и собран с поддержкой доступности.
- Плагин QPA получает уведомление от операционной системы о необходимости активации доступности. Например, это происходит при использовании программы чтения с экрана на Windows или VoiceOver на macOS.
Из-за некоторых ограничений плагин QPA для Linux почти всегда сообщает о необходимости активации доступности. На больших веб-страницах это может значительно замедлить скорость рендеринга.
По этой причине поддержка доступности Qt WebEngine по умолчанию отключена в Qt 5.9 и более поздних версиях на Linux. Её можно включить, установив переменную среды QTWEBENGINE_ENABLE_LINUX_ACCESSIBILITY в ненулевое значение.
Поп-ап окна в приложениях с полноэкранным режимом на Windows
Из-за ограничения в композиторе Windows приложения, отображающие веб-вью Qt WebEngine в полноэкранном режиме, не будут корректно отображать всплывающие окна или другие окна верхнего уровня. Причина и способы решения этой проблемы описаны в разделах Полностьюэкранные окна на основе OpenGL и QWindowsWindowFunctions::setHasBorderInFullScreen.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtwebengine-platform-notes.html