Erstellen Sie eine Qt-Anwendung in WebAssembly unter Windows



Wie Sie wissen, können in Qt geschriebene Anwendungen, die plattformübergreifend sind, von Desktops, Mobilgeräten, dem Internet der Dinge bis hin zu Mikrocontrollern ausgeführt werden .

Eine Möglichkeit besteht darin, eine Qt-Anwendung in WebAssembly zu erstellen, mit der Sie sie im Browser eines Benutzers ausführen können. Daher besteht das Aktualisieren der Anwendung für den Benutzer darin, eine neue WASM-Datei auf den Server hochzuladen.

Um die Bereitstellung der Anwendung als Teil dieses Artikels zu vereinfachen, stellen wir die Qt-Anwendung in WebAssembly für Windows über die Befehlszeile zusammen.

Die Version von Qt 5.13.2 wurde im Artikel verwendet, und ich glaube, dass der Benutzer die Qt-Umgebung installiert und konfiguriert hat und Anwendungen für Desktop in Windows sammelt.

Führen Sie das Hilfsprogramm MaintenanceTool.exe aus, wählen Sie "Komponenten hinzufügen oder entfernen" aus, aktivieren Sie das Kontrollkästchen WebAssembly und warten Sie, bis die Installation abgeschlossen ist.



Erstellen Sie ein leeres Projekt, zum Beispiel in Qt Creator (Qt Stack-Ansicht) und speichern Sie es.

Wir gehen zur offiziellen Qt WASM- Dokumentationsseite.

Wir fangen an, esmdk zu installieren. Laden Sie emscripten herunter und entpacken Sie es beispielsweise in c: \ wasm

Wir starten die Kommandozeile (fangen an, cmd auszuführen) und versuchen sie zu installieren:

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

Hier passiert nichts. Und der Cursor befindet sich bereits in der nächsten Zeile. Was könnte passieren? Mal sehen warum? Öffnen Sie die Datei mit dem Editor und sehen Sie:



Brauchen wir eine Python? Überprüfen? Wir schreiben in die Kommandozeile

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

Dann müssen wir noch Python installieren. Laden Sie es herunter und installieren Sie es. Denken Sie daran, ein Häkchen hinzuzufügen, wenn Sie "Add Python 3.8 to PATH" installieren.



Schließen Sie nach dem Herunterladen und Installieren die Befehlszeile und führen Sie CMD erneut aus. Wir prüfen:

 c:\emsdk>python --version Python 3.8.1 

Installieren Sie emsdk und aktivieren Sie die Build-Umgebung:

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

Wir prüfen:

 em++ 

Der Compiler ist fertig. Es ist Zeit, mit der Erstellung unserer Anwendung zu beginnen. Schauen wir uns den Ordner an, in dem Qt wasm installiert ist: In meinem Fall befindet er sich in C: \ Qt \ 5.13.2 \ wasm_32

Führen Sie die Befehlszeile mit der Umgebung zum Erstellen von Mingw aus: Starten Sie mingw - wählen Sie Qt 5.13.2 (MinGW 7.3.0 32-Bit).

Wir aktivieren unsere emsdk darin:

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

Wir gehen in den Ordner mit der Testanwendung und versuchen zu sammeln:

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


Ist etwas schief gelaufen? Habe ich den String und die Umgebung für die Assembly irgendwie nicht korrekt aktiviert? Schließen Sie die Befehlszeile und führen Sie sie erneut aus: Starten Sie mingw - wählen Sie Qt 5.13.2 (MinGW 7.3.0 32-Bit) und überprüfen Sie, ob qmake vorhanden ist:

 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 

Alles ist in Ordnung, die Qt-Umgebung ist aktiviert und qmake funktioniert. Wir versuchen, emsdk erneut zu aktivieren und erhalten den gleichen Fehler.

Nun, ich dachte, es ist möglich, einen Freund dazu zu bringen, zuerst emsdk auszuführen und dann die mingw-Umgebung zu aktivieren. Dazu müssen wir uns die Verknüpfung zum Starten der Konsole mit der mingw32-Umgebung ansehen (mingw starten - mit der rechten Maustaste auf den Speicherort der Datei klicken - mit der rechten Maustaste auf „Qt 5.13.2 (MinGW 7.3.0 32-Bit) ”- Eigenschaften.



Im Objekt interessiert uns der Pfad zum Starten der bat-Datei. In meinem Fall ist es C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat

Also fangen wir von vorne an. Starten Sie die Ausführung von 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 

funktioniert ... gehe in den Ordner mit dem Quellcode des Projekts

 qmake make "make"      ,     . 

Wir erinnern uns, dass wir mingw verwenden und der Befehl zum Erstellen darin anders ist:
mingw32-make.exe

 mingw32-make 

Die Anwendung wurde zusammengestellt, überprüft jedoch, ob sie verwendet wurde:

 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' 


Also Halt an Was haben wir gesammelt?

Wir haben die übliche 32-Bit-Anwendung für den Desktop (x86) erstellt, da wir die Assembly C: \ Qt \ 5.13.2 \ mingw73_32 verwendet haben

Und wir mussten WASM bauen. Passen wir die PATH-Umgebung so an, dass zuerst der Pfad und qmake aus dem wasm-Ordner übernommen werden:

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

Wir löschen den Ordner aus den gesammelten Dateien

 mingw32-make.exe clean del .qmake.stash 

Wir beginnen mit der Montage

 qmake 



Was? Wieder ein Fehler? Welche Art von DLL brauchen wir? Suchen wir danach in dem Ordner, in dem Qt installiert ist:
Wie kann das sein? Wird für 32-Bit-kompiliertes WASM (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) eine Bibliothek aus 64-Bit-MINGW verwendet?



Nehmen wir an, Sie können die Gelegenheit nutzen und den Pfad zu dieser 64-Bit-Bibliothek hinzufügen:

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

und ... viele Fehler

Weitere Details
 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 

Warum so viele Fehler? Warum hast du es nicht getan? Ich habe die temporären Dateien aufgeräumt, den Build gestartet und so viele Fehler bekommen.

Also, du musst nachdenken, eine Tasse Tee / Kaffee einschenken ...

Richtig! Die Idee! Weil Anscheinend haben wir den letzten Pfad zu 64-Bit-Bibliotheken als letzten geschrieben. Als er dann einen 32-Bit-WASM erstellte, verstand er nicht, wie und was er verknüpfen sollte, und versuchte, den Pfad zur 64-Bit-Bibliothek zu verwenden, was bedeutet, dass ich den Pfad zur 32-Bit-Bibliothek früher als zuvor angeben musste 64 bit. Ich werde versuchen, es zu beheben:

Schließe die Konsole. Wir öffnen wieder mingw 32-bit und hier besucht mich der Gedanke: Wir haben bereits die Befehlszeile für mingw 32 Bit gestartet und dann den Pfad zu den Bibliotheken durch 64 Bit ersetzt. Wir werden wieder Vorrang beim Aufbau der Qt-Desktop-Umgebung auf 64-Bit-Komponenten haben und wir brauchen umgekehrt (da PATH zuerst mit bis zu 64 Bit verwendet wird). und dann bis zu 32 Bibliotheken insgesamt). Dann wird unser endgültiger Algorithmus so aussehen:

 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 

füge den Pfad zu wasm hinzu und gehe sammeln:

 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 wieder! Was ist nun los mit mir? Wo ist diese Datei überhaupt? Wohin Suchanfragen im Explorer besagen, dass es sich um C: \ Qt \ Tools \ mingw730_32 \ bin handelt

Nun, mingw32-make.exe wird nun definitiv bei uns gefunden:

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

Wir fangen an zu sammeln:

 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 ?? Dies ist nicht Linux, Mac, * nix, * BSD. Wo kann man es bekommen? Search (sed.exe)? .. Und wir finden nicht.

Wir gehen ins Internet, suchen nach (sed download windows) und stellen fest, dass es für Windows heruntergeladen werden kann:

Laden Sie binaries Zip herunter, entpacken Sie es aus dem Ordner bin / sed.exe und führen Sie Folgendes aus:





Zwei Fehler bei fehlenden DLL-Komponenten. Müssen wir noch sed aus dem Quellcode sammeln oder nach diesen fehlenden DLLs suchen? Nein, das würde ich nicht gerne tun ... Noch einmal schauen wir uns die GNU- Website genau an und sehen sie in den Downloads: • Vollständiges Paket, außer Quellensetup

Herunterladen, entpacken und installieren. Versuche zu rennen:

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

Es funktioniert !!! Es muss noch einmal zum Pfad hinzugefügt werden:

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

Der Prozessor ist hochgefahren, die Montage hat begonnen. Nun, ich hoffe, dass es uns jetzt gelingt!

Es dauerte ... Minuten

 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! Es stellte sich heraus. Unsere Testanwendung ist zusammengestellt. Wasm binar benötigt 20 MB. Nicht ein bisschen. Versuchen wir, unsere Datei test-wasm.htm in einem Browser zu öffnen und ...



So fassen Sie zusammen, wie Sie eine Qt-Anwendung für 5.13.2 unter Windows erstellen:



1. Sie müssen Python installieren. GNU SED und installiere binäre Assemblys WebAssembly über online installiertes 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% 

Aber Habr wäre nicht Habr, wenn ich nicht versucht hätte , die WebAssembly- Anwendung aus der neuesten Version von Qt zu erstellen , die derzeit 5.14.0 ist . Ich hoffe, ich erwarte am Ende nicht genau die gleiche Aufgabe wie beim Erstellen von Version 5.13.2.

Über das Online-Installationsprogramm (MaintenanceTool.exe) installieren wir Qt WebAssembly für Version 5.14.0. Wir konfigurieren die Umgebung und führen die Assembly aus.

Der Prozess geht weiter und ...



Nichts ist klar. Wie ist es? In Version 5.13.2 konnte ich nach dem Tanzen mit einem Tamburin die Anwendung zusammenstellen, aber in Version 5.14.0 hat es nicht geklappt? Aber wie haben sie es dann zusammengebaut?

... Aber können wir auch WASM Qt 5.14.0 aus dem Quellcode erstellen? Und warum nicht? Dazu benötigen wir viel Platz auf der Festplatte sowie eine gute Auslastung des Prozessors:

 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 

In diesem Fall wird wasm nach der Assembly im Ordner c: \ qtwasm installiert, und es müssen keine Beispiele gesammelt werden.

Konfigurationsausgabe
 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. 


Wir montieren und montieren:

 mingw32-make mingw32-make install 

Nachdem ich WASM Qt 5.14.0 neu erstellt und c: \ qtwasm im Ordner installiert und diesen Pfad verwendet habe, konnte ich WebAssembly aus der Version 5.14.0 von Qt erstellen.

Schlussfolgerung 2.


Wenn Sie Qt 5.14.0 WebAssembly verwenden möchten, müssen Sie es aus den Quellen neu erstellen und die Version verwenden, die Sie bereits erstellt haben.

Fazit


Qt WebAssembly ist eine interessante Technologie, die seit Version 5.12 in Qt verfügbar ist.

WebAssembly- Beispiele können online auf der Qt-Website eingesehen werden.

Beim Versuch, ein eigenes Projekt zu erstellen, sind jedoch Fehler aufgetreten:



Daher ist es bei der Verwendung dieser Technologie erforderlich, deren Grenzen zu untersuchen .

Derzeit nicht unterstützte Module: qtmultimedia, qtwebview.

Derzeit funktioniert WebAssembly hauptsächlich in Desktop-Browsern und es ist nicht bekannt, wann die vollständige Unterstützung auf Mobilgeräten angezeigt wird.

Für diejenigen, die diesen Artikel bis zum Ende gelesen, aber noch nie Qt ausprobiert haben, können Sie das Online-Installationsprogramm herunterladen, die MinGW-Optionen und die erforderliche Version von Qt WebAssmbly auswählen. QtCreator wird standardmäßig installiert und Sie können Ihre erste Anwendung erstellen.

Am Ende dieses Artikels möchte ich empfehlen, dass Benutzer versuchen, Beispiele aus den Qt-Quellen, aus dem Ordner Src \ qtcharts \ examples, zu sammeln und sie in einem Browser auszuführen.

Zum Starten des Webservers können Sie Python verwenden und Folgendes ausführen:
python -m http.server 8000 --bind 192.168.0.10 wenn Sie eine Adresse im lokalen Netzwerk des Computers 192.168.0.10 haben. Vergessen Sie auch nicht, den Port in der Firewall zu öffnen, und versuchen Sie dann, die Anwendung über einen Browser von einem anderen Computer / Gerät / Smartphone aus zu öffnen.

Stimmen Sie ab und geben Sie in den Kommentaren Beispiele für die Verwendung des besten GUI-Frameworks für C ++ Qt an.

Viel Glück mit Ihrer Kreativität und neuen Errungenschaften!

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


All Articles