Не имея никакого опыта разработки фронтенда веб-приложений, хотя имею поверхностное представление об html/javascript/css, я столкнулся с такой штукой как webassembly и узнав, что приложение написанное на c++/qt/qml можно запустить в браузере решил, что эту технологию обязательно нужно попробовать оседлать.

Сборка

Тут вроде все довольно просто.

  • Качаем emscripten
  • Устанавливаем
$ ./emsdk install sdk-fastcomp-1.38.30-64bit
$ ./emsdk activate --embedded sdk-fastcomp-1.38.30-64bit
$ source emsdk_env.sh
  • Собираем наше приложение используя wasm qmake
$ ~/.prog/Qt/5.14.2/wasm_32/bin/qmake ..
$ make

Запуск

Для локального запуска можно воспользоваться утилитой emrun

$ emrun --no_browser --port 7373 SmartTap.html

Далее в браузере стучимся по адресу https::/localhost:7373/SmartTap.html

Для запуска приложения на сервере, или например на github pages достаточно вытянуть следующие файлы из сборочной директории и положить туда, откуда клиент сможет получить к ним доступ.

$ ls build_wasm/
SmartTap.wasm   qtloader.js    qtlogo.svg    
SmartTap.html   SmartTap.js

К примеру, мой тестовый проект валяется тут. Да, приложение дейсвительно запускается. Придется конечно немного подождать пока подгрузиться файл с расширением wasm, в моем случае он весит примерно 20 мегабайт.

Все ли так хорошо?

Нет, не все. Например, у меня (на момент написания поста) не работает звук, По всей видимости из-за отсутсвия поддержки qtmultimedia. Об ограничениях написано здесь