Spec-Zone.ru › Qt 5.13

Заметки к платформе Qt WebAssembly

Поддерживаемые целевые браузеры и устройства

Рабочий стол

  • Chrome
  • FireFox
  • Safari
  • Edge(Chrome)

Если браузер поддерживает WebAssembly, Qt должен работать.

Примечание: Qt имеет фиксированное требование к WebGL, также для приложений, которые не используют WebGL напрямую. Браузеры часто помещают WebGL в список запрещенных для старых/неподдерживаемых графических процессоров.

Мобильные устройства

  • Браузер Android
  • Mobile Safari

Примечание: В настоящее время нет поддержки ввода текста с помощью виртуальной клавиатуры. Safari в настоящее время не поддерживает wasm-модули размера, который производит Qt.

Qt не использует напрямую функции операционной системы, и не имеет значения, например, работает ли FireFox на Windows или macOS. Qt использует некоторые адаптации операционной системы, например, для обработки клавиш ctrl/cmd на macOS.

Поддерживаемые модули Qt

Qt для WebAssembly поддерживает подмножество модулей Qt. В списке ниже перечислены текущие протестированные модули. Список можно вставить в качестве аргументов в make.

module-qtbase module-qtdeclarative module-qtquickcontrols2 module-qtwebsockets module-qtsvg module-qtcharts module-qtmqtt

Другие модули не протестированы и могут работать. Не поддерживаются: QtMultimedia и QtWebView

Известные проблемы

Обратитесь к Известным проблемам на вики-странице.

Общие заметки

  • Отладка: вывод отладки и регистрации Qt выводится в консоль JavaScript, к которой можно получить доступ через "Инструменты разработчика" браузера или аналогичным образом.
  • Вложенные циклы событий не поддерживаются. Приложения не должны вызывать, например, QDialog::exec() или создавать новый объект QEventLoop.
  • Qt отображает содержимое приложения на элементе холста и не использует (другие) собственные элементы DOM. Это означает, что не поддерживаются средства доступности (экранные читатели), и что ввод текста не вызовет виртуальную клавиатуру.
  • WebGL требуется, даже для приложений, которые сами не используют OpenGL. Большинство современных браузеров поддерживают WebGL, но обратите внимание, что некоторые браузеры исключают определённые старые графические процессоры. Загрузчик Qt обнаружит это и отобразит сообщение об ошибке.
  • Вложенные окна OpenGL не поддерживаются. Композитор окон (в плагине платформы Qt для Wasm) поддерживает только растровые окна.
  • Qt обнаружит поддержку OpenGL как OpenGL ES. На самом деле браузер предоставит WebGL. WebGL основан на ES и очень похож, но есть некоторые несовместимости. См. Различия между WebGL и OpenGL.
  • Приложения не имеют доступа к системным шрифтам. Файлы шрифтов должны распространяться вместе с приложением, например, в ресурсах Qt. Сам Qt для WebAssembly встраивает один такой шрифт.
  • Высокая DPI и масштабирование: Поддерживается отображение высокой DPI, а также установка общего визуального размера пользовательского интерфейса с помощью функции масштабирования браузера. Настройки размера шрифта (и типа) браузера не влияют на приложения Qt.
  • Возможны артефакты неинициализированной графической памяти на некоторых компонентах Qt Quick Controls 2, таких как флажки.
  • Доступ к сети: веб-песочница ограничивает доступ к сети подмножеством того, что доступно для нативных приложений.
    • QNetworkAccessManager запросы HTTP к серверу происхождения веб-страницы или к серверу, который поддерживает CORS.
    • Подключения QWebScoket к любому хосту.
    • Тунелирование TCP и UDP-сокеттов с использованием WebSockets с использованием сервера websockify [реализован Emscripten, не протестирован].
      • Websockify v0.8.0 можно использовать для тунелирования TCP-соединений с QT5.12, но ОБЯЗАТЕЛЬНО указать базовый протокол base64 или двоичный перед вызовом QWebSocket::open().
      • Например:

        QWebSocket socket;

        QUrl url{QString("ws://server:port")};

        QNetworkRequest request{url};

        request.setRawHeader("Sec-WebSocket-Protocol", "binary");

        socket.open(request);

  • Ожидаются предупреждения на этапе компоновки: "невозможно представить значение NaN с пользовательским битовым шаблоном '0x7fdae4bde910'",.
  • Ожидаемый размер (размер загрузки): wasm-модули, произведённые компилятором, могут быть большими, но хорошо сжимаются.
Пример gzip brotli
helloglwindow (QtCore + QtGui) 2.8М 2.1М
wiggly widget (QtCore + QtGui + QtWidgets) 4.3М 3.2М
SensorTag (QtCore + QtGui + QtWidgets + QtQuick + QtCharts) 8.6М 6.3М

Сжатие, как правило, выполняется на стороне веб-сервера с использованием стандартных функций сжатия: сервер автоматически сжимает или выбирает предварительно сжатые версии файлов. Обычно нет необходимости в специальной обработке wasm-файлов.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qtwebassembly-platform-notes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API