© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Запуск приложений Qt в браузере благодаря использованию WebGL плагина

QML, Qt, WebGL, 3D

Интересная особенность пришла в Qt 5.10, это новый бэк-энд Qt, который использует WebGL для визуализации. Это позволяет приложениям Qt (с некоторыми ограничениями) работать в веб-браузере, который поддерживает WebGL.

Что это такое?

В новом бэк-энде используется WebGL, что означает Web Graphic Library . WebGL - это API JavaScript для визуализации 2D и 3D-графики в любом совместимом веб-браузере без использования плагинов. API похож на OpenGL ES 2.0 и может использоваться в элементах canvas HTML5.

Новый бэк-энд будет представлен как техническая функция предварительного просмотра в Qt 5.10.0 и включен в версии Alpha и Beta (на данный момент, Qt 5.10.0 является бета-версией на 1ом этапе разработки).

Последний исходный код также доступен в Qt git на http://code.qt.io/cgit/qt/qtwebglplugin.git/ .

Плагин распространяется либо по лицензии GPLv3, либо по коммерческим лицензиям. Обратите внимание, что он недоступен в LGPL. Одним из последствий лицензии GPL является то, что если вы ссылаетесь на нее (даже динамически), код вашего приложения попадает под GPL.

Как это использовать

Предположим, что вы собрали Qt 5.10 с плагином WebGL, плагин будет доступен в качестве бэк-энда. Чтобы использовать его, передайте в ваше приложение опцию -platform webgl , а затем откройте веб-браузер по адресу http://localhost:8080/ .

Плагин поддерживает конфигурацию сетевого порта, используемого встроенным HTTP-сервером. Если вы хотите использовать HTTP-порт по умолчанию, вы можете, например, использовать опцию -platform webgl:port=80 .

Плагин устанавливается в QTDIR /plugins/platforms/libqwebgl.so (в Windows путь аналогичен).

Ограничения

С выпусками Alpha и Beta 1 Qt 5.10.0 плагин WebGL успешно работал в системе Ubuntu Linux 17.04 с использованием браузера Chromium.

Он должен работать с другими браузерами, поддерживающими WebGL, включая мобильные и встроенные браузеры. Предполагается, что вы также можете запустить его в представлении QtWebEngine вместо обычного браузера. Пока что еще нет документации (т.к. всего лишь Beta 1), за исключением нескольких сообщений в блоге.

Плагин поддерживает только приложения QML. Неизвестно, будет ли он поддерживать виджеты. По словам разработчиков, поддержку виджетов будет трудно достичь с хорошей производительностью, потому что они полагаются на растеризацию.

Вы можете подумать, что запуск в браузере означает, что приложение будет работать в песочнице и не иметь доступа к каким-либо ресурсам за пределами браузера, например файлам. Однако в браузере выполняется только рендеринг, а само приложение работает как обычное приложение (однако оно может не работать на том же компьютере, что и на дисплее).

Опыт

С Qt 5.10.0 Beta 1 несколько примеров QML, которые были пробованы, работали достаточно хорошо. Некоторые из них столкнулись с некоторыми проблемами, а некоторые не запускались вообще. Вот скриншоты из нескольких примеров.

Qt Quick Controls Text Editor:
Qt Quick Controls Gallery: QML Photoviewer: SameGame:

Заключение

В прошлом решение о разработке приложения, которое может запускаться нативно или в веб-браузере, обычно подразумевало использование значительно отличающихся стратегий (например, использование Qt/QML или использование HTML5). Предполагая, что плагин WebGL становится стабильным и завершенным, он предложит привлекательный подход для разработки веб-приложений используя Qt и для превращения нативного приложения Qt на базе QML в веб-приложение с минимальными усилиями. Тем не менее, имейте в виду последствия лицензирования, когда вы решаете, использовать ли коммерческую или версию с открытым исходным кодом Qt.

Я с нетерпением жду, когда плагин WebGL будет задокументирован и станет более завершенным в выпуске Qt 5.10.0 в конце этого года

Ссылки

  1. http://blog.qt.io/blog/2017/10/09/qt-5-10-beta-released/
  2. http://blog.qt.io/blog/2017/09/13/qt-5-10-alpha-released/
  3. http://blog.qt.io/blog/2017/02/22/qt-quick-webgl-streaming/
  4. http://blog.qt.io/blog/2017/07/07/qt-webgl-streaming-merged

Статья написана: Jeff Tranter | Среда, Октябрь 25, 2017г.

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
21 мая 2018 г. 8:30
Nasty

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 10 баллов
  • Очки рейтинга -10
20 мая 2018 г. 12:26
Venic

C++ - Тест 002. Константы

  • Результат 58 баллов
  • Очки рейтинга -2
20 мая 2018 г. 12:16
Venic

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 90 баллов
  • Очки рейтинга 8
Последние комментарии
19 мая 2018 г. 12:44
EVILEG

Django - Snippet 001. get_object_or_none

А вы гарантируете, что метод first вернёт нужный объект, если в таблице две похожих записи? Этого никто не гарантирует. Может возникнуть неопределённое поведение приложения, если запись не так...
19 мая 2018 г. 12:34
Pavel

Django - Snippet 001. get_object_or_none

Согласен с тем что ваше решение более очевидно при чтении кода. first() же здесь применяется не совсем по назначению. А с последствиями "моего" решения не согласен. Метод вернёт только один об...
19 мая 2018 г. 12:27
EVILEG

Как я использовал FilterView заместо ListView для упрощения фильтрации

Может быть, а может и нет, все имеют различную речь.. не могу отвечать за всех пользователей ресурса.. поскольку каждый пользователь может дополнить материал ресурса статьями.
19 мая 2018 г. 12:25
EVILEG

Django - Snippet 001. get_object_or_none

В вашем случае происходит подмена сущностей. Вместо того, чтобы взять один конкретный объект, вы забираете queryset а потом берёте из него первый объект. Нехорошо будет, если queryset в каком-...
19 мая 2018 г. 11:11
Pavel

Django - Snippet 001. get_object_or_none

Тоже искал подобную функцию, чтобы не обрабатывать каждый раз исключения. И нашёл на so совет использовать вместо неё метод менеджера first(), который возвращает None при пустом queryset. Т.е ...
Сейчас обсуждают на форуме
21 мая 2018 г. 16:18
otvertka

Выводит мусор

Да, мыши. Т.е. мне надо создать класс-потомок от QPushButton, и там переопределить метод mousePressEvent? И как тогда у  Buttons поменять класс на созданный?
20 мая 2018 г. 2:05
vitaliy_antipov

Удаление серии из графика

Ой, извините, совсем запарился. Туплю: void MainWindow::onDelSeries(int i){ chartview->chart()->findChild<QLineSeries *>("obj" + QString::number(i))->deleteLater();...
18 мая 2018 г. 8:55
mak_trefa

Сборщик мусора и Connections в qml

можешь попробовать в деструкторе модели вызвать throw; и в дебагере посмотреть stacktrace
17 мая 2018 г. 20:30
EVILEG

Нарисовать дугу в QGraphicsItem

Добрый день! Оу, я смотрю по гитхабу, что вы уже разобрались с проблемой. Извиняюсь, заработался и забыл про ваш вопрос.
17 мая 2018 г. 15:34
Евгений_Канусовский@1981

Проблема с combobox

Спасибо за очередную помощь!

Рекомендуемые страницы