Créer une application Qt dans WebAssembly sous Windows



Comme vous le savez, les applications écrites en Qt, qui est multiplateforme, s'exécutent depuis le bureau, le mobile, l'Internet des objets , jusqu'aux microcontrôleurs .

Une option consiste à créer une application Qt dans WebAssembly - qui vous permettra de l'exécuter dans le navigateur d'un utilisateur. Ainsi, la mise à jour de l'application pour l'utilisateur consistera à télécharger un nouveau fichier wasm sur le serveur.

Pour faciliter le déploiement de l'application, dans le cadre de cet article, assemblons l'application Qt dans WebAssembly pour Windows sur la ligne de commande.

La version Qt 5.13.2 est utilisée dans l'article et je pense que l'utilisateur a l'environnement Windows Qt installé, configuré et qu'il collecte des applications pour Desktop sans aucun problème.

Exécutez l'utilitaire MaintenanceTool.exe et sélectionnez "Ajouter ou supprimer des composants" et cochez la case WebAssembly et attendez la fin de l'installation.



Créez un projet vide, par exemple dans Qt Creator (Qt Stack-view) et enregistrez-le.

Nous allons sur la page de documentation officielle de Qt WASM .

Nous commençons à installer esmdk. Téléchargez emscripten et décompressez, par exemple, dans c: \ wasm

Nous démarrons la ligne de commande (commencez à exécuter cmd) et essayons de l'installer:

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

Rien ne se passe ici. Et le curseur est déjà sur la ligne suivante. Que pourrait-il arriver? Voyons pourquoi? Ouvrez le fichier avec le bloc-notes et voyez:



Avons-nous besoin d'un python? VĂ©rifiez? Nous Ă©crivons dans la ligne de commande

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

Eh bien, nous devons encore installer Python. Téléchargez et installez-le. N'oubliez pas d'ajouter une coche lors de l'installation de «Ajouter Python 3.8 à PATH»



Après avoir téléchargé et installé, fermez la ligne de commande et réexécutez CMD. Nous vérifions:

 c:\emsdk>python --version Python 3.8.1 

Installez emsdk et activez l'environnement de génération:

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

Nous vérifions:

 em++ 

Le compilateur est prêt. Il est temps de commencer à créer notre application. Regardons le dossier où Qt wasm est installé: dans mon cas, il se trouve dans C: \ Qt \ 5.13.2 \ wasm_32

Exécutez la ligne de commande avec l'environnement de construction de Mingw: Démarrez mingw - sélectionnez Qt 5.13.2 (MinGW 7.3.0 32 bits)

Nous y activons notre emsdk:

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

Nous allons dans le dossier avec l'application de test et essayons de collecter:

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


Quelque chose a mal tourné? En quelque sorte, n'ai-je pas correctement activé la chaîne et l'environnement pour l'assembly? Fermez la ligne de commande et exécutez-la à nouveau: Démarrez mingw - sélectionnez Qt 5.13.2 (MinGW 7.3.0 32 bits) et vérifiez que nous avons 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 

Tout va bien, l'environnement Qt est activé et qmake est fonctionnel. Nous essayons de réactiver emsdk et obtenons la même erreur.

Eh bien, je pensais, il est possible d'en faire un ami: exécutez d'abord emsdk puis activez l'environnement mingw - pour cela, nous devons regarder le raccourci de lancement de la console avec l'environnement mingw32 (démarrer mingw - cliquer avec le bouton droit sur l'emplacement du fichier ouvert - cliquer avec le bouton droit sur "Qt 5.13.2 (MinGW 7.3.0 32 bits) »- propriétés.



Dans l'objet, nous nous intéressons au chemin de lancement du fichier bat. Dans mon cas, c'est C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat

Nous recommençons donc. Lancer exécuter 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 

fonctionne ... allez dans le dossier avec le code source du projet

 qmake make "make"      ,     . 

Nous rappelons que nous utilisons mingw et la commande pour le construire est différente en elle:
mingw32-make.exe

 mingw32-make 

L'application s'est assemblée, mais vérifie qu'elle a bien été utilisée:

 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' 


Alors Arrêter Qu'avons-nous collecté?

Nous avons construit l' application 32 bits habituelle pour le bureau (x86) car nous avons utilisé l'assembly C: \ Qt \ 5.13.2 \ mingw73_32

Et nous avions besoin de construire WASM. Modifions l'environnement PATH pour qu'il prenne d'abord le chemin et qmake du dossier wasm:

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

Nous effaçons le dossier des fichiers collectés

 mingw32-make.exe clean del .qmake.stash 

Nous commençons l'assemblage

 qmake 



Qu'est-ce que Encore une erreur? De quel type de DLL avons-nous besoin? Cherchons-le dans le dossier où Qt est installé:
Comment est-ce possible? Le WASM 32 bits compilé (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) utilise-t-il une bibliothèque de MINGW 64 bits?



Eh bien, supposons que vous puissiez tenter votre chance, ajoutez le chemin d'accès à cette bibliothèque 64 bits:

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

et ... beaucoup d'erreurs

plus de détails
 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 

Pourquoi tant d'erreurs? Pourquoi pas toi? J'ai nettoyé les fichiers temporaires, j'ai commencé la construction et j'ai eu tellement d'erreurs.

Donc, vous devez penser, versez une tasse de thé / café ...

Ok! L'idée! Parce que apparemment, nous avons écrit le dernier chemin d'accès aux bibliothèques 64 bits comme le dernier, puis lors de la construction d'un WASM 32 bits, il n'a pas compris comment et quoi lier, et a essayé d'utiliser le chemin d'accès à la bibliothèque 64 bits, ce qui signifie que je devais spécifier le chemin vers la bibliothèque 32 bits plus tôt qu'auparavant. 64 bits. Je vais essayer de le réparer:

Fermez la console. Nous ouvrons à nouveau mingw 32 bits et ici la pensée me rend visite: nous avons déjà lancé la ligne de commande pour mingw 32 bits, puis en remplaçant le chemin d'accès aux bibliothèques par 64 bits, nous prendrons à nouveau la priorité lors de la construction de l'environnement de bureau Qt sur des composants 64 bits, et nous avons besoin d'un vice versa (car PATH sera utilisé jusqu'à 64 bits en premier, puis jusqu'à 32 bibliothèques au total). Eh bien, notre algorithme final sera comme ceci:

 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 

ajoutez le chemin au wasm et allez collecter:

 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 encore! Maintenant, qu'est-ce qui ne va pas avec moi? OĂą est ce fichier? OĂą aller? Les recherches dans l'Explorateur indiquent qu'il se trouve dans C: \ Qt \ Tools \ mingw730_32 \ bin

Eh bien, mingw32-make.exe sera maintenant définitivement trouvé avec nous:

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

Nous commençons à collecter:

 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 ?? Ce n'est pas Linux, Mac, * nix, * BSD. OĂą l'obtenir? Rechercher (sed.exe)? .. Et nous ne trouvons pas.

Nous prenons Internet, recherchons (fenêtres de téléchargement sed) et constatons qu'il peut être téléchargé pour Windows :

Téléchargez les binaires Zip, décompressez à partir du dossier bin / sed.exe et exécutez:





Deux erreurs sur les composants dll manquants. Avons-nous encore besoin de sed pour collecter à partir de la source ou rechercher ces DLL manquantes? Non, je ne voudrais pas faire ça ... Encore une fois, nous regardons attentivement le site Web GNU et le voyons dans les téléchargements: • Package complet, à l'exception de la configuration des sources

Téléchargez, décompressez et installez. Essayez d'exécuter:

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

Ça marche !!! Il reste à l'ajouter à nouveau au chemin:

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

Le processeur a démarré, l'assemblage a commencé. Eh bien, j'espère que maintenant nous réussirons!

Cela a pris ... minutes

 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 

Hourra! Cela s'est avéré. Notre application de test est assemblée. Le binar Wasm prend 20 Mo. Pas un peu. Essayons d'ouvrir notre fichier test-wasm.htm dans un navigateur et ...



Pour résumer comment créer une application Qt pour 5.13.2 sous Windows:



1. Vous devez installer Python. GNU SED et installer les assemblys binaires WebAssembly via Qt installé en ligne

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% 

Mais Habr ne serait pas Habr si je n'avais pas essayé de construire l'application WebAssembly à partir de la dernière version de Qt, qui est actuellement la 5.14.0 . J'espère que je ne m'attendrai pas à la fin de la même quête que lors de la construction dans la version 5.13.2.

Grâce au programme d'installation en ligne (MaintenanceTool.exe), nous installons Qt WebAssembly pour la version 5.14.0. Nous configurons l'environnement et exécutons l'assemblage.

Le processus continue et ...



Rien n'est clair. Comment est-ce? Pour la version 5.13.2, après avoir dansé avec un tambourin, j'ai pu assembler l'application, mais pour 5.14.0 ça n'a pas marché? Mais comment l'ont-ils (Qt) assemblé?

... Mais pouvons-nous Ă©galement construire WASM Qt 5.14.0 Ă  partir des sources? Et pourquoi pas. Pour ce faire, nous avons besoin de beaucoup d'espace sur le disque dur, ainsi que d'une bonne charge / charge pour le processeur:

 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 

Dans ce cas, après l'assemblage, nous aurons installé wasm dans le dossier c: \ qtwasm, et pourtant nous n'avons pas besoin de collecter d'exemples.

Sortie de configuration
 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. 


Nous assemblons et installons:

 mingw32-make mingw32-make install 

Après avoir reconstruit WASM Qt 5.14.0 et installé c: \ qtwasm dans le dossier et utilisé ce chemin, j'ai pu créer WebAssembly à partir de la version 5.14.0 de Qt.

Conclusion 2.


Si vous souhaitez utiliser Qt 5.14.0 WebAssembly, vous devrez le reconstruire à partir des sources et utiliser la version que vous avez déjà construite.

Conclusion


Qt WebAssembly est une technologie assez intéressante qui est apparue dans Qt depuis la version 5.12 .

Des exemples de WebAssembly peuvent être consultés en ligne sur le site Web de Qt.

Cependant, lorsque j'ai essayé de créer mon propre projet, j'ai eu des erreurs:



Par conséquent, lors de l'utilisation de cette technologie, il est nécessaire d'étudier ses limites .

Modules non pris en charge actuellement: qtmultimedia, qtwebview.

Actuellement, WebAssembly fonctionne principalement dans les navigateurs de bureau, et lorsque la prise en charge complète apparaît sur les appareils mobiles n'est pas connue.

Pour ceux qui ont lu cet article jusqu'au bout, mais qui n'ont jamais essayé Qt, vous pouvez télécharger le programme d' installation en ligne , sélectionner les options MinGW et la version requise de Qt WebAssmbly. QtCreator sera installé par défaut et vous pourrez créer votre première application.

À la fin de cet article, je voudrais recommander aux utilisateurs d'essayer de collecter des exemples à partir des sources Qt, du dossier Src \ qtcharts \ examples et de les exécuter dans un navigateur.

Pour démarrer le serveur Web, vous pouvez utiliser Python et exécuter:
python -m http.server 8000 --bind 192.168.0.10 si vous avez une adresse dans le réseau local de l'ordinateur 192.168.0.10. N'oubliez pas non plus d'ouvrir le port dans le pare-feu, puis vous pouvez essayer d'ouvrir l'application via un navigateur à partir d'un autre ordinateur / appareil / smartphone.

Votez et donnez vos exemples d'utilisation du meilleur framework GUI pour C ++ Qt dans les commentaires.

Bonne chance avec votre créativité et vos nouvelles réalisations!

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


All Articles