Cree una aplicación Qt en WebAssembly en Windows



Como saben, las aplicaciones escritas en Qt, que es multiplataforma, se ejecutan desde computadoras de escritorio, dispositivos móviles, Internet de las cosas , hasta microcontroladores .

Una opción es crear una aplicación Qt en WebAssembly, que le permite ejecutarla en el navegador de un usuario. Por lo tanto, actualizar la aplicación para el usuario consistirá en cargar un nuevo archivo wasm en el servidor.

Para facilitar la implementación de la aplicación, como parte de este artículo, ensamblemos la aplicación Qt en WebAssembly para Windows en la línea de comandos.

La versión de Qt 5.13.2 se usó en el artículo y creo que el usuario tiene el entorno Qt instalado, configurado y recopila aplicaciones para escritorio en Windows.

Ejecute la utilidad MaintenanceTool.exe y seleccione "Agregar o quitar componentes" y marque la casilla de WebAssembly y espere a que se complete la instalación.



Cree un proyecto vacío, por ejemplo en Qt Creator (Qt Stack-view) y guárdelo.

Vamos a la página oficial de documentación de Qt WASM .

Comenzamos a instalar esmdk. Descargue emscripten y descomprima, por ejemplo, en c: \ wasm

Iniciamos la línea de comando (comenzamos a ejecutar cmd) e intentamos instalarla:

cd c:\emsdk emsdk.bat install sdk-fastcomp-1.38.27-64bit 

Aquí no pasa nada. Y el cursor ya está en la siguiente línea. Que podria pasar A ver por qué? Abra el archivo con el bloc de notas y vea:



¿Necesitamos una pitón? Cheque? Escribimos en la linea de comando

 c:\emsdk>python --version "python"      ,     . 

Bueno, entonces aún necesitamos instalar Python. Descárguelo e instálelo. Recuerde agregar una marca de verificación al instalar "Agregar Python 3.8 a la RUTA"



Después de descargar e instalar, cierre la línea de comando y ejecute CMD nuevamente. Comprobamos:

 c:\emsdk>python --version Python 3.8.1 

Instale emsdk y active el entorno de compilación:

 emsdk.bat install sdk-fastcomp-1.38.27-64bit emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit 

Comprobamos:

 em++ 

El compilador está listo. Es hora de comenzar a construir nuestra aplicación. Veamos la carpeta donde está instalado Qt wasm: en mi caso, se encuentra en C: \ Qt \ 5.13.2 \ wasm_32

Ejecute la línea de comando con el entorno para construir Mingw: Inicie mingw - seleccione Qt 5.13.2 (MinGW 7.3.0 32-bit)

Activamos nuestro emsdk en él:

 c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit 

Entramos en la carpeta con la aplicación de prueba e intentamos recopilar:

 cd c:\Project\test-wasm qmake "qmake"      ,     . 


¿Algo salió mal? ¿De alguna manera no activé correctamente la cadena y el entorno para el ensamblaje? Cierre la línea de comando y ejecútela nuevamente: comience mingw - seleccione Qt 5.13.2 (MinGW 7.3.0 32-bit) y verifique que tengamos 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 

Todo está bien, el entorno Qt está activado y qmake es funcional. Intentamos activar emsdk nuevamente y obtenemos el mismo error.

Bueno, pensé, es posible hacer el de un amigo: primero ejecute emsdk y luego active el entorno mingw; para esto, debemos mirar el acceso directo de inicio de la consola con el entorno mingw32 (iniciar mingw - hacer clic con el botón derecho en la ubicación del archivo abierto - hacer clic con el botón derecho en "Qt 5.13.2 (MinGW 7.3.0 32-bit) ”- propiedades.



En el objeto, estamos interesados ​​en la ruta para iniciar el archivo bat. En mi caso es C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat

Entonces, comenzamos de nuevo. Comience a ejecutar 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 

funciona ... ve a la carpeta con el código fuente del proyecto

 qmake make "make"      ,     . 

Recordamos que usamos mingw y el comando para construirlo es diferente:
mingw32-make.exe

 mingw32-make 

La aplicación se ha ensamblado, pero comprueba que se haya utilizado:

 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' 


Entonces Para ¿Qué hemos recogido?

Creamos la aplicación habitual de 32 bits para escritorio (x86) porque usamos el ensamblado C: \ Qt \ 5.13.2 \ mingw73_32

Y necesitábamos construir WASM. Ajustemos el entorno PATH para que tome primero la ruta y qmake de la carpeta wasm:

 set PATH=c:\Qt\5.13.2\wasm_32\bin;%PATH% 

Limpiamos la carpeta de los archivos recopilados.

 mingw32-make.exe clean del .qmake.stash 

Comenzamos el montaje

 qmake 



Que es ¿Otra vez un error? ¿Qué tipo de dll necesitamos? Vamos a buscarlo en la carpeta donde está instalado Qt:
¿Cómo puede ser esto? ¿WASM compilado de 32 bits (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) utiliza una biblioteca de MINGW de 64 bits?



Bueno, suponga que puede arriesgarse, agregue la ruta a esta biblioteca de 64 bits:

 set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% mingw32-make.exe clean qmake mingw32-make.exe 

y ... muchos errores

mas detalles
 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 

¿Por qué tantos errores? ¿Por qué no lo hiciste? Limpié los archivos temporales, comencé la compilación y obtuve muchos errores.

Entonces, debes pensar, sirve una taza de té / café ...

Derecho! La idea! Porque aparentemente escribimos la última ruta a las bibliotecas de 64 bits como la última, luego, al construir un WASM de 32 bits, no entendió cómo y qué vincular, e intentó usar la ruta a la biblioteca de 64 bits, lo que significa que tuve que especificar la ruta a la biblioteca de 32 bits antes que antes 64 bit. Intentaré arreglarlo:

Cierra la consola. Abrimos mingw 32 bits nuevamente y aquí el pensamiento me visita: Ya lanzamos la línea de comando para mingw de 32 bits, luego reemplazamos la ruta de acceso a las bibliotecas por 64 bits, nuevamente tendremos prioridad al construir el entorno de escritorio Qt en componentes de 64 bits, y necesitamos una viceversa (porque PATH se usará primero hasta 64 bits, y luego hasta 32 bibliotecas en total). Pues bien, nuestro algoritmo final será así:

 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 

agregue la ruta al wasm y vaya a recolectar:

 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 de nuevo! Ahora que me pasa? ¿Dónde está este archivo? A donde Las búsquedas en Explorer dicen que está en C: \ Qt \ Tools \ mingw730_32 \ bin

Bueno, mingw32-make.exe ahora definitivamente se encontrará con nosotros:

 set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH% 

Comenzamos a recolectar:

 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 -es/@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 ?? Esto no es Linux, Mac, * nix, * BSD. ¿Dónde conseguirlo? Buscar (sed.exe)? .. Y no lo encontramos.

Tomamos Internet, buscamos (ventanas de descarga sed) y encontramos que se puede descargar para Windows :

Descargue binarios Zip, descomprímalos de la carpeta bin / sed.exe y ejecute:





Dos errores en componentes dll faltantes. ¿Todavía necesitamos sed para recolectar de la fuente o buscar estos dlls faltantes? No, no me gustaría hacer esto ... Una vez más, miramos cuidadosamente el sitio web de GNU y lo vemos en Descargas: • Paquete completo, excepto la configuración de las fuentes

Descargar, descomprimir e instalar. Intenta correr:

 "c:\Program Files (x86)\GnuWin32\bin\sed.exe" 

Funciona !!! Queda por agregarlo nuevamente a la ruta:

 set PATH="c:\Program Files (x86)\GnuWin32\bin";%PATH% mingw32-make 

El procesador se ha iniciado, el ensamblaje ha comenzado. Bueno, ¡espero que ahora tengamos éxito!

Tardó ... minutos

 emcc: warning: cannot represent a NaN literal '0x22748a2c570' with custom bit pattern in NaN-canonicalizing JS engines (eg 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 (eg 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 

¡Hurra! Resultó Nuestra aplicación de prueba está ensamblada. Wasm binar toma 20 MB. No un poco Intentemos abrir nuestro archivo test-wasm.htm en un navegador y ...



Para resumir cómo construir una aplicación Qt para 5.13.2 en Windows:



1. Necesita instalar Python. GNU SED e instale ensamblados binarios WebAssembly a través de Qt instalado en línea

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% 

Pero Habr no sería Habr si no hubiera intentado compilar la aplicación WebAssembly a partir de la última versión de Qt, que actualmente es 5.14.0 . Espero no esperar exactamente la misma búsqueda desde el final que al construir en la versión 5.13.2.

A través del instalador en línea (MaintenanceTool.exe) instalamos Qt WebAssembly para la versión 5.14.0. Configuramos el entorno y ejecutamos el ensamblaje.

El proceso continúa y ...



Nada esta claro. Como es eso Para la versión 5.13.2, después de bailar con una pandereta, pude armar la aplicación, pero para 5.14.0 no funcionó. ¿Pero cómo entonces (Qt) lo ensamblaron?

... ¿Pero también podemos construir WASM Qt 5.14.0 desde la fuente? Y porque no. Para hacer esto, necesitamos mucho espacio en el disco duro, así como una buena carga / carga para el procesador:

 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 

En este caso, después del ensamblaje, tendremos wasm instalado en la carpeta c: \ qtwasm y, sin embargo, no necesitamos recopilar ejemplos.

Salida de configuración
 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. 


Montamos e instalamos:

 mingw32-make mingw32-make install 

Después de reconstruir WASM Qt 5.14.0 e instalar c: \ qtwasm en la carpeta y usar esta ruta, pude construir WebAssembly a partir de la versión 5.14.0 de Qt.

Conclusión 2.


Si desea utilizar Qt 5.14.0 WebAssembly, deberá reconstruirlo desde las fuentes y utilizar la versión que ya ha creado.

Conclusión


Qt WebAssembly es una tecnología bastante interesante que ha aparecido en Qt desde la versión 5.12 .

Los ejemplos de WebAssembly se pueden ver en línea en el sitio web de Qt.

Sin embargo, al intentar construir mi propio proyecto, recibí errores:



Por lo tanto, cuando se utiliza esta tecnología, es necesario estudiar sus limitaciones .

Módulos no soportados actualmente: qtmultimedia, qtwebview.

Actualmente, WebAssembly funciona principalmente en navegadores de escritorio, y no se conoce cuándo aparece el soporte completo en dispositivos móviles.

Para aquellos que han leído este artículo hasta el final, pero nunca han probado Qt, pueden descargar el instalador en línea , seleccionar las opciones de MinGW y la versión requerida de Qt WebAssmbly. QtCreator se instalará de manera predeterminada y puede crear su primera aplicación.

Al final de este artículo, me gustaría recomendar que los usuarios intenten recopilar ejemplos de fuentes Qt, de la carpeta Src \ qtcharts \ examples y ejecutarlos en un navegador.

Para iniciar el servidor web, puede usar Python y ejecutar:
python -m http.server 8000 --bind 192.168.0.10 si tiene una dirección en la red local de la computadora 192.168.0.10. Además, no olvide abrir el puerto en el Firewall, y luego puede intentar abrir la aplicación a través de un navegador desde otra computadora / dispositivo / teléfono inteligente.

Vota y da tus ejemplos de uso del mejor marco GUI para C ++ Qt en los comentarios.

¡Buena suerte con tu creatividad y tus nuevos logros!

Source: https://habr.com/ru/post/485610/


All Articles