Как известно, приложения написанные на Qt, который является кросс платформенными запускаются от desktop, мобильных, интернет вещей, до микроконтроллеров.
Один из вариантов это сборка приложения Qt в WebAssembly — которое позволит Вам запускать его в браузере у пользователя. Таким образом обновление приложения для пользователя будет заключаться в загрузке на сервер нового файла wasm.
Чтобы легче было осуществлять деплой приложения, в рамках данной статьи давайте соберём приложение Qt в WebAssmbly под Windows в командной строке.
В статье использована версия Qt 5.13.2 и я считаю, что у пользователя в Windows среда Qt установлена, настроена, и приложения для Desktop он без проблем собирает.
Запускаем утилиту MaintenanceTool.exe и выбираем «Добавление или удаление компонентов» и ставим галочку у WebAssembly и ждём завершения установки.

Создаём пустой проект, например в Qt Creator (Qt Stack-view) и сохраняем его.
Идем на официальную страницу документации Qt WASM.
Начинаем ставить esmdk. Скачиваем emscripten и распаковываем, например в c:\wasm
Запускаем командную строку (пуск выполнить cmd) и пытаемся установить его:
cd c:\emsdk emsdk.bat install sdk-fastcomp-1.38.27-64bit
У нас ничего не происходит. И курсор уже находится на следующей строке. Что могло случиться? Давайте посмотрим, почему? Открываем файл блокнотом и видим:

Нам нужен питон? Проверяем? Пишем в командной строке
c:\emsdk>python --version "python" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Ну значит нам еще необходимо установить Python. Скачиваем и устанавливаем его. Не забудьте добавить галочку при устанговке «Add Python 3.8 to PATH»

После загрузки и установки, закрываем командную строку и запускаем снова CMD. Проверяем:
c:\emsdk>python --version Python 3.8.1
Устанавливаем emsdk и активируем окружение окружение для сборки:
emsdk.bat install sdk-fastcomp-1.38.27-64bit emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit
Проверяем:
em++
Компилятор готов. Пора приступать к сборке нашего приложения. Посмотрим в папку, где установлен Qt wasm: в моем случае он находится в C:\Qt\5.13.2\wasm_32
Запускаем командную строку с окружением для сборки Mingw: Пуск mingw — выбираем Qt 5.13.2 (MinGW 7.3.0 32-bit)
В ней активируем наш emsdk:
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit
заходим в папку с тестовым приложением и пытаемся собрать:
cd c:\Project\test-wasm qmake "qmake" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Что-то пошло не так? Я как-то не правильно активировал строку и окружение для сборки? Закроем командную строку и снова её запустим: Пуск mingw — выбираем Qt 5.13.2 (MinGW 7.3.0 32-bit) и проверим, что qmake есть у нас:
Setting up environment for Qt usage... C:\Qt\5.13.2\mingw73_32>qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/Qt/5.13.2/mingw73_32/lib
Все хорошо, окружение Qt активировано и qmake работоспособно. Пробуем снова активировать emsdk и получаем ту же самую ошибку.
Ну хорошо, подумал я, можно же сделать и подругому: сначала запустим emsdk, а потом активируем окружение mingw — для этого нам надо посмотреть ярлык запуска консоли с окружением mingw32 (пуск выполнить mingw — правая кнопка открыть расположение файла — правой кнопкой мыши на «Qt 5.13.2 (MinGW 7.3.0 32-bit)» — свойства.

В объекте нас интересует путь к запуску bat файла. В моём случае это C:\Qt\5.13.2\mingw73_32\bin\qtenv2.bat
Итак начинаем всё сначала. Пуск выполнить cmd
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit C:\Qt\5.13.2\mingw73_32\bin\qtenv2.bat qmake --version
работает… идём в папку с исходным кодом проекта
qmake make "make" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Вспоминаем, что мы используем mingw и в ней команда для сборки другая:
mingw32-make.exe
mingw32-make
Приложение собралось, но проверям, что было использовано:
g++ -Wl,-s -Wl,-subsystem,windows -mthreads -o release\test-wasm.exe release/main.o release/qrc_qml.o C:\Qt\5.13.2\mingw73_32\lib\libQt5Quick.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Gui.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Qml.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Network.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Core.a -lmingw32 C:\Qt\5.13.2\mingw73_32\lib\libqtmain.a -LC:\openssl\lib -LC:\Utils\my_sql\mysql-5.7.25-win32\lib -LC:\Utils\postgresql\pgsql\lib -lshell32 mingw32-make.exe[1]: Leaving directory 'c:/Project/test-wasm'
Так. Стоп? Что мы собрали?
Мы же собрали обычное 32 битное приложение для desktop (x86) потому что у нас использовалась сборка C:\Qt\5.13.2\mingw73_32
А нам нужно было собрать WASM. Давайте подкорректируем окружение PATH, чтобы он брал сначала путь и qmake из папки wasm:
set PATH=c:\Qt\5.13.2\wasm_32\bin;%PATH%
Очищаем папку от собранных файлов
mingw32-make.exe clean del .qmake.stash
Запускаем сборку
qmake

Что такое? Опять ошибка? Что за dll нам нужна? Давайте ее поищем в папке, где установлен Qt:
Разве такое может быть? 32 битный собранный WASM (c:\Qt\5.13.2\wasm_32\bin) использует библиотеку от 64 битного MINGW?

Ну допустим, можно и рискнуть, добавить путь до этой 64 битной библиотеки:
set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% mingw32-make.exe clean qmake mingw32-make.exe
и… куча ошибок
release/main.o:main.cpp:(.text+0x1bc): undefined reference to `_imp___ZN4QUrlD1Ev' release/main.o:main.cpp:(.text+0x1c6): undefined reference to `_imp___ZN11QMetaObject10ConnectionD1Ev' release/main.o:main.cpp:(.text+0x1d7): undefined reference to `_imp___ZN21QQmlApplicationEngine4loadERK4QUrl' release/main.o:main.cpp:(.text+0x1e0): undefined reference to `_imp___ZN15QGuiApplication4execEv' release/main.o:main.cpp:(.text+0x1ef): undefined reference to `_imp___ZN21QQmlApplicationEngineD1Ev' release/main.o:main.cpp:(.text+0x1f8): undefined reference to `_imp___ZN15QGuiApplicationD1Ev' release/main.o:main.cpp:(.text+0x225): undefined reference to `_imp___ZN10QArrayData10deallocateEPS_jj' release/main.o:main.cpp:(.text+0x249): undefined reference to `_imp___ZN21QQmlApplicationEngineD1Ev' release/main.o:main.cpp:(.text+0x252): undefined reference to `_imp___ZN15QGuiApplicationD1Ev' release/main.o:main.cpp:(.text+0x276): undefined reference to `_imp___ZN10QArrayData10deallocateEPS_jj' release/main.o:main.cpp:(.text+0x28f): undefined reference to `_imp___ZN4QUrlD1Ev' release/main.o:main.cpp:(.text+0x2aa): undefined reference to `_imp___ZN4QUrlD1Ev' release/qrc_qml.o:qrc_qml.cpp:(.text+0x23): undefined reference to `qUnregisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text+0x53): undefined reference to `qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text+0x83): undefined reference to `qUnregisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text.startup+0x23): undefined reference to `qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)'
C:/Qt/Tools/mingw730_32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status mingw32-make[1]: *** [Makefile.Release:66: release/test-wasm.exe] Error 1 mingw32-make[1]: Leaving directory 'c:/Project/test-wasm' mingw32-make: *** [Makefile:38: release] Error 2
Почему столько ошибок? Почему не собралось? Я же почистил временные файлы, запустил сборку, и получил так много error.
Так, надо подумать, налить чашку чая/кофе…
Точно! Идея! Т.к. видимо мы прописали последним путь к 64 битным библиотекам, то следовательно при сборке 32 разрядного WASM он не понял, как и что линковать, и пытался использовать путь к 64 битным lib, а значит мне надо было указать путь до 32 битных lib раньше, чем до 64 битных. Попробую исправить:
Закрываем консоль. Открываем снова mingw 32-bit и тут меня посещает мысль: т.к. мы запустили уже командную строку для mingw 32 бит, то заменив путь до библиотек на 64 битные, мы снова сделаем приоритет при сборке на 64 битные компоненты Desktop окружения Qt, а нам надо наоброт (т.к. сначала будет использоваться PATH до 64 битных, а затем до 32 итных библиотек). Ну тогда у нас итоговый алгоритм будет такой:
cmd c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/qt/5.13.2/mingw73_64/lib
добавляем путь до wasm и идём собирать:
set PATH=c:\Qt\5.13.2\wasm_32\bin;%PATH% cd c:\Project\test-wasm c:\Project\test-wasm>qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/Qt/5.13.2/wasm_32/lib qmake mingw32-make "mingw32-make" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Опять 25! А сейчас то что у меня не так? Где вообще этот файл? Куда делся? Поиски в проводнике говорят что он находится в C:\Qt\Tools\mingw730_32\bin
Ну хорошо, mingw32-make.exe теперь точно у нас будет найден:
set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH%
Начинаем собирать:
c:\Project\test-wasm>mingw32-make c:\Qt\5.13.2\wasm_32\bin\qmake.exe -o Makefile test-wasm.pro Info: creating stash file C:\Project\test-wasm\.qmake.stash sed -e s/@APPNAME@/test-wasm/g C:/Qt/5.13.2/wasm_32/plugins/platforms/wasm_shell.html > C:/Project/test-wasm/test-wasm.html "sed" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. mingw32-make: *** [Makefile:424: apphtml] Error 1
sed ?? Это же не Linux, Mac, *nix, *BSD. Где его взять? Поищем (sed.exe)?.. И не находим.
Берем интернет, ищем (sed download windows) и находим, что его можно скачать для Windows:
Скачиваем binaries Zip, распаковываем из папки bin/sed.exe и запускаем:


Две ошибки на недостающие компоненты dll. Нам что теперь еще и sed надо будет самим собирать из исходников или искать эти отсутствующие dll? Нет, такого бы не хотелось делать… Еще раз внимательнее смотрим сайт GNU и видим в Downloads: • Complete package, except sources Setup
Скачиваем, распаковываем и устанавливаем. Пробуем запустить:
"c:\Program Files (x86)\GnuWin32\bin\sed.exe"
Работает!!! Осталось добавить его снова в путь:
set PATH="c:\Program Files (x86)\GnuWin32\bin";%PATH% mingw32-make
Процессор загрузился, сборка началась. Ну вот, надеюсь, что теперь у нас все получится!
Прошло… минут
emcc: warning: cannot represent a NaN literal '0x22748a2c570' with custom bit pattern in NaN-canonicalizing JS engines (e.g. Firefox and Safari) without erasing bits! in ret double 0x7FF4000000000000 in _ZL7qt_snanv() emcc: warning: cannot represent a NaN literal '0x22748a2c570' with custom bit pattern in NaN-canonicalizing JS engines (e.g. Firefox and Safari) without erasing bits! in ret double 0x7FF4000000000000 in _ZL7qt_snanv.30589() c:\Project\test-wasm>dir ... 25.01.2020 17:42 2 922 test-wasm.html 25.01.2020 17:55 355 725 test-wasm.js 25.01.2020 14:59 461 test-wasm.js_plugin_import.cpp 25.01.2020 16:23 4 384 test-wasm.js_plugin_import.obj 25.01.2020 15:49 601 test-wasm.js_qml_plugin_import.cpp 25.01.2020 16:23 4 668 test-wasm.js_qml_plugin_import.obj 25.01.2020 14:52 1 099 test-wasm.pro 25.01.2020 15:25 22 523 test-wasm.pro.user 25.01.2020 17:55 20 759 738 test-wasm.wasm
Ура! Получилось. Наше тестовое приложение собралось. Бинарь wasm занимает 20 Мб. Не мало. Давайте попробуем открыть в браузере файл наш test-wasm.htm и…

Подведу итоги, как нужно собирать приложение Qt для 5.13.2 в Windows:
1. Необходимо установить Python. GNU SED и установить бинарные сборки WebAssembly через online installed Qt
2.
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit set PATH="c:\Program Files (x86)\GnuWin32\bin";%PATH% set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH%
Но Хабр не был бы Хабром, если бы я не попробовал собрать приложение WebAssembly и из последней версии Qt, которая имеется в настоящий момент 5.14.0. Надеюсь, меня дальше не будет ожидать точно такой же квест, как при сборке в версии 5.13.2.
Через онлайн инсталлер (MaintenanceTool.exe) ставим Qt WebAssembly для версии 5.14.0. Конфигурируем окружение и запускаем сборку.
Процесс идёт и…

Ничего не понятно. Как это? Для версии 5.13.2, я после танцев с бубном, смог собрать приложение, а для 5.14.0 это не получилось? А как же тогда они (Qt) собрали его?
… А мы же тоже можем собрать WASM Qt 5.14.0 из исходников? А почему бы и нет. Для этого нам требуется много места на жёстком диске, а так же хорошая нагрузка/загрузка для процессора:
echo PATH=c:\qtwasm514\bin;"C:\Program Files (x86)\GnuWin32\bin";c:\qt\Tools\mingw730_32\bin;%PATH% c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit cd c:\Qt\5.14.0\Src configure.bat -no-warnings-are-errors -xplatform wasm-emscripten -platform win32-g++ -nomake examples -prefix c:\qtwasm
В данном случае после сборки у нас будет установлен wasm в папку c:\qtwasm, и ещё нам не нужно собирать примеры (examples).
Building on: win32-g++ (i386, CPU features: none) Building for: wasm-emscripten (wasm, CPU features: none) Target compiler: clang 6.0.1 Configuration: cross_compile largefile release c++11 no-pkg-config reduce_exports static stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. no Using C standard ....................... C11 Using C++ standard ..................... C++11 Using ccache ........................... no Using precompiled headers .............. no Using LTCG ............................. no Target compiler supports: Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... no Qt D-Bus ............................... no Qt D-Bus directly linked to libdbus .... no Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. no Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... no udev ................................... no Using system zlib ...................... no Zstandard support ...................... no Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... no iconv .................................. yes ICU .................................... no Built-in copy of the MIME database ..... yes Tracing backend ........................ none Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... no Qt Network: getifaddrs() ........................... no IPv6 ifname ............................ no libproxy ............................... no OpenSSL ................................ no Qt directly linked to OpenSSL ........ no OpenSSL 1.1 ............................ no DTLS ................................... no OCSP-stapling .......................... no SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ no HarfBuzz ............................... yes Using system HarfBuzz ................ no Fontconfig ............................. no Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... no PNG .................................. yes Using system libpng ................ no EGL .................................... yes OpenVG ................................. no OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ yes OpenGL ES 3.0 ........................ no OpenGL ES 3.1 ........................ no OpenGL ES 3.2 ........................ no Vulkan ................................. no Session Management ..................... yes Features used by QPA backends: evdev .................................. no libinput ............................... no INTEGRITY HID .......................... no mtdev .................................. no tslib .................................. no xkbcommon .............................. no X11 specific: XLib ................................. no XCB Xlib ............................. no EGL on X11 ........................... no QPA backends: DirectFB ............................... no EGLFS .................................. no LinuxFB ................................ no VNC .................................... yes Mir client ............................. no Qt Sql: SQL item models ........................ yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... no Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... no PostgreSQL ............................. no SQLite2 ................................ no SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... no Qt Testlib: Tester for item models ................. yes Qt SerialBus: Socket CAN ............................. no Socket CAN FD .......................... no SerialPort Support ..................... no Further Image Formats: JasPer ................................. no MNG .................................... no TIFF ................................... yes Using system libtiff ................. no WEBP ................................... yes Using system libwebp ................. no Qt QML: QML network support .................... yes QML debugging and profiling support .... yes QML tracing JIT support ................ no QML sequence object .................... yes QML list model ......................... yes QML XML http request ................... yes QML Locale ............................. yes QML delegate model ..................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes TableView item ......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes Repeater item .......................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Scxml: ECMAScript data model for QtScxml ...... yes Qt Gamepad: SDL2 ................................... no Qt 3D GeometryLoaders: Autodesk FBX ........................... no Qt Wayland Client ........................ no Qt Wayland Compositor .................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no WinRT advanced bluetooth low energy API (desktop & UWP) . no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Positioning: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Qt Location: Qt.labs.location experimental QML plugin . yes Geoservice plugins: OpenStreetMap ........................ no HERE ................................. yes Esri ................................. yes Mapbox ............................... yes MapboxGL ............................. no Itemsoverlay ......................... yes QtXmlPatterns: XML schema support ..................... yes Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ no OpenAL ................................. no PulseAudio ............................. no Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt Tools: QDoc ................................... no Qt WebEngineCore: Qt WebEngine Widgets ................... yes Qt WebEngine Qml ....................... yes Embedded build ......................... yes Full debug information ................. no Pepper Plugins ......................... no Printing and PDF ....................... no Proprietary Codecs ..................... no Spellchecker ........................... yes Native Spellchecker .................... no WebRTC ................................. no Use System Ninja ....................... no Geolocation ............................ yes WebChannel support ..................... yes Use v8 snapshot ........................ yes Kerberos Authentication ................ no Extensions ............................. no Support qpa-xcb ........................ no Building v8 snapshot supported ......... yes Use ALSA ............................... no Use PulseAudio ......................... no Optional system libraries used: re2 .................................. no icu .................................. no libwebp, libwebpmux and libwebpdemux . no opus ................................. no ffmpeg ............................... no libvpx ............................... no snappy ............................... no glib ................................. no zlib ................................. no minizip .............................. no libevent ............................. no jsoncpp .............................. no protobuf ............................. no libxml2 and libxslt .................. no lcms2 ................................ no png .................................. no JPEG ................................. no harfbuzz ............................. no freetype ............................. no Required system libraries: fontconfig ........................... no dbus ................................. no nss .................................. no khr .................................. no glibc ................................ no Required system libraries for qpa-xcb: x11 .................................. no libdrm ............................... no xcomposite ........................... no xcursor .............................. no xi ................................... no xtst ................................. no Qt WebEngineQml: UI Delegates ........................... yes Test Support ........................... no Note: Using static linking will disable the use of dynamically loaded plugins. Make sure to import all needed static plugins, or compile needed modules into the library. Note: No wayland-egl support detected. Cross-toolkit compatibility disabled. Note: The following modules are not being compiled in this configuration: serialport 3dcore 3drender WARNING: QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation. Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path. WARNING: host pkg-config not found Qt is now configured for building. Just run 'mingw32-make'. Once everything is built, you must run 'mingw32-make install'. Qt will be installed into 'c:\qtwasm'. Prior to reconfiguration, make sure you remove any leftovers from the previous build.
Собираем и устанавливаем:
mingw32-make mingw32-make install
После того, как я пересобрал WASM Qt 5.14.0 и установил в папку c:\qtwasm и использовал этот путь, я смог собрать WebAssembly из 5.14.0 версии Qt.
Вывод 2.
Если хотите использовать Qt 5.14.0 WebAssembly, вам потребуется его пересобрать из исходников и использовать уже собранную вами версию.
Заключение
Qt WebAssembly достаточно интересная технология, которая появилась в Qt начиная с версии 5.12.
Примеры WebAssembly можно посмотреть онлайн на сайте Qt.
Однако при попытке сборки собственного проекта, я получил ошибки:

Поэтому при использованиии данной технологии обязательно нужно изучать о её ограничениях.
Сейчас не поддерживаются модули: qtmultimedia, qtwebview.
В настоящий момент WebAssembly работает в большей части в Desktop браузерах, а когда появится полная поддержка в мобильных устройствах не известно.
Для тех, кто дочитал до конца данную статью, но еще ни разу не пробовал Qt, Вы можете скачать онлайн установщик, выбрать опции MinGW и нужную версию Qt WebAssmbly. QtCreator установится по умолчанию и Вы сможете собрать своё первое приложение.
В завершении данной статьи я бы хотел бы рекомендовать пользователям попробовать собрать примеры из исходников Qt, из папки Src\qtcharts\examples и запустить их в браузере.
Чтобы запустить веб сервер можно использовать Python, и выполнить:
python -m http.server 8000 --bind 192.168.0.10 если у вас адрес в локальной сети у компьютера 192.168.0.10. Так же не забудьте открыть порт в Firewall и тогда можно пробовать с другого компьютера/устройства/смартфона открыть приложение через браузер.
Голосуйте, и приводите свои примеры использования лучшего GUI фреймворка для C++ Qt в комментариях.
Удачного Вам творчества и новых достижений!
ссылка на оригинал статьи https://habr.com/ru/post/485610/
Добавить комментарий