بناء تطبيق كيو تي في WebAssembly على ويندوز



كما تعلمون ، فإن التطبيقات المكتوبة في Qt ، والتي هي عبر منصة ، تعمل من سطح المكتب ، المحمول ، إنترنت الأشياء ، إلى متحكم دقيق .

أحد الخيارات هو إنشاء تطبيق Qt في WebAssembly - والذي يسمح لك بتشغيله في مستعرض المستخدم. وبالتالي ، فإن تحديث التطبيق للمستخدم سيتضمن تحميل ملف wasm جديد إلى الخادم.

لتسهيل نشر التطبيق ، كجزء من هذه المقالة ، دعونا نقوم بتجميع تطبيق Qt في WebAssembly لـ Windows في سطر الأوامر.

تم استخدام إصدار Qt 5.13.2 في المقالة وأعتقد أن المستخدم قام بتثبيت بيئة Qt وتهيئتها ويقوم بجمع التطبيقات لسطح المكتب في Windows.

قم بتشغيل الأداة المساعدة 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"      ,     . 

حسنًا ، ما زلنا بحاجة لتثبيت بيثون. قم بتنزيله وتثبيته. تذكر إضافة علامة اختيار عند تثبيت "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 بت) "- الخصائص.



في الكائن ، نحن مهتمون بمسار تشغيل ملف الخفافيش. في حالتي ، يكون C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat

لذلك ، نبدأ من جديد. البدء في تنفيذ كمد

 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 بت لسطح المكتب (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 



ما هو مرة أخرى خطأ؟ أي نوع من دلل نحتاج؟ دعونا نبحث عنه في المجلد حيث تم تثبيت Qt:
كيف يمكن أن يكون هذا؟ هل تستخدم WASM المترجمة 32 بت (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) باستخدام مكتبة من MINGW 64 بت؟



حسنًا ، لنفترض أنه يمكنك انتهاز الفرصة ، أضف المسار إلى مكتبة 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 

لماذا الكثير من الاخطاء؟ لماذا لم تفعل؟ قمت بتنظيف الملفات المؤقتة ، وبدأت الإنشاء ، وحصلت على الكثير من الأخطاء.

لذلك ، تحتاج إلى التفكير ، صب كوب من الشاي / القهوة ...

بالضبط! الفكرة! لأن من الواضح أننا كتبنا المسار الأخير إلى مكتبات 64 بت باعتباره الأخير ، ثم عند بناء WASM 32 بت ، لم يفهم كيف وماذا يربط ، وحاول استخدام المسار إلى lib 64 بت ، مما يعني أنه كان علي تحديد المسار إلى 32 بت ليب سابقًا من قبل 64 بت. سأحاول إصلاحه:

أغلق وحدة التحكم. نفتح mingw 32 بت مرة أخرى وهنا الفكر يزورني: لقد أطلقنا بالفعل سطر الأوامر لـ mingw 32 بت ، ثم استبدلنا الطريق إلى المكتبات بـ 64 بت ، وسنتولى مرة أخرى الأولوية عند بناء بيئة سطح مكتب Qt على مكونات 64 بت ، ونحتاج إلى العكس (لأن 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 مرة أخرى! الآن ما هو الخطأ معي؟ أين هذا الملف على الإطلاق؟ إلى أين؟ تشير عمليات البحث في Explorer إلى أنها في 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 -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 

سيد ؟؟ هذا ليس Linux، Mac، * nix، * BSD. أين يمكن الحصول عليها؟ البحث (sed.exe)؟ .. ونحن لا نجد.

نحن نأخذ الإنترنت ونبحث عن (windows download sed) ونجد أنه يمكن تنزيله لـ Windows :

قم بتنزيل ملف binaries Zip ، وقم بفك الحزم من مجلد bin / sed.exe وتشغيله:





اثنين من الأخطاء في عداد المفقودين مكونات دلل. هل ما زلنا بحاجة إلى sed لجمعها من المصدر أو البحث عن هذه dlls المفقودة؟ لا ، لا أرغب في القيام بذلك ... مرة أخرى ، ننظر بعناية إلى موقع جنو ونرى ذلك في التنزيلات: • الحزمة كاملة ، باستثناء المصادر إعداد

تحميل ، فك وتثبيت. حاول الجري:

 "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 (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 

الصيحة! اتضح. يتم تجميع تطبيق الاختبار لدينا. يأخذ Wasar binar 20 ميغابايت. ليس قليلا. دعونا نحاول فتح ملف test-wasm.htm في مستعرض و ...



لتلخيص كيفية إنشاء تطبيق Qt لـ 5.13.2 على Windows:



1. تحتاج إلى تثبيت بيثون. GNU SED وتثبيت التجميعات الثنائية WebAssembly من خلال كيو تي المثبتة عبر الإنترنت

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% 

لكن Habr لن يكون Habr إذا لم أحاول إنشاء تطبيق WebAssembly من أحدث إصدار من Qt ، وهو حاليًا 5.14.0 . آمل ألا أتوقع نفس المطلب الدقيق من النهاية كما هو الحال عند إنشاء الإصدار 5.13.2.

من خلال برنامج التثبيت عبر الإنترنت (MaintenanceTool.exe) ، نقوم بتثبيت QT WebAssembly للإصدار 5.14.0. نحن تكوين البيئة وتشغيل التجمع.

تستمر العملية و ...



لا يوجد شيء واضح. كيف هذا؟ بالنسبة للإصدار 5.13.2 ، بعد الرقص مع الدف ، تمكنت من تجميع التطبيق ، لكن بالنسبة إلى الإصدار 5.14.0 لم ينجح الأمر؟ ولكن كيف إذن قاموا بتجميعها؟

... ولكن هل يمكننا بناء 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 ، ولكننا لسنا بحاجة لجمع أمثلة.

إخراج التكوين
 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 حاليًا في الغالب في متصفحات سطح المكتب ، وعندما لا يظهر الدعم الكامل على الأجهزة المحمولة.

بالنسبة لأولئك الذين قرأوا هذه المقالة حتى النهاية ، لكنهم لم يجربوا كيو تي مطلقًا ، يمكنك تنزيل برنامج التثبيت عبر الإنترنت وتحديد خيارات MinGW والإصدار المطلوب من QT WebAssmbly. سيتم تثبيت QtCreator افتراضيًا ويمكنك بناء التطبيق الأول.

في نهاية هذه المقالة ، أود أن أوصي بأن يحاول المستخدمون جمع أمثلة من مصادر Qt ، من مجلد Src \ qtcharts \ الأمثلة وتشغيلها في مستعرض.

لبدء خادم الويب ، يمكنك استخدام Python وتشغيله:
python -m http.server 8000 --bind 192.168.0.10 إذا كان لديك عنوان في الشبكة المحلية للكمبيوتر 192.168.0.10. أيضًا ، لا تنسَ فتح المنفذ في جدار الحماية ، ثم يمكنك محاولة فتح التطبيق من خلال متصفح من جهاز كمبيوتر آخر / جهاز / هاتف ذكي آخر.

قم بالتصويت وإعطاء أمثلة باستخدام أفضل إطار عمل واجهة المستخدم الرسومية لـ C ++ Qt في التعليقات.

حظا سعيدا مع إبداعك والإنجازات الجديدة!

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


All Articles