Criar um aplicativo Qt no WebAssembly no Windows



Como você sabe, os aplicativos escritos em Qt, que são multiplataforma, são executados em computadores, dispositivos móveis, Internet das coisas e microcontroladores .

Uma opção é criar um aplicativo Qt no WebAssembly - o que permite executá-lo no navegador de um usuário. Portanto, a atualização do aplicativo para o usuário consistirá no upload de um novo arquivo wasm para o servidor.

Para facilitar a implantação do aplicativo, como parte deste artigo, vamos montar o aplicativo Qt no WebAssembly for Windows na linha de comando.

A versão Qt 5.13.2 foi usada no artigo e acredito que o usuário tenha o ambiente Qt instalado, configurado no Windows e ele colete aplicativos para o Desktop sem problemas.

Execute o utilitário MaintenanceTool.exe e selecione "Adicionar ou remover componentes", marque a caixa WebAssembly e aguarde a conclusão da instalação.



Crie um projeto vazio, por exemplo, no Qt Creator (exibição Qt Stack) e salve-o.

Vamos para a página oficial da documentação do Qt WASM .

Começamos a instalar o esmdk. Faça o download do emscripten e descompacte, por exemplo, em c: \ wasm

Iniciamos a linha de comando (comece a executar o cmd) e tentamos instalá-lo:

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

Nada está acontecendo aqui. E o cursor já está na próxima linha. O que poderia acontecer? Vamos ver porque? Abra o arquivo com o bloco de notas e veja:



Precisamos de um python? Verificar? Escrevemos na linha de comando

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

Bem, ainda precisamos instalar o Python. Baixe e instale. Lembre-se de adicionar uma marca de seleção ao instalar "Add Python 3.8 to PATH"



Após baixar e instalar, feche a linha de comando e execute o CMD novamente. Verificamos:

 c:\emsdk>python --version Python 3.8.1 

Instale o emsdk e ative o ambiente de construção:

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

Verificamos:

 em++ 

O compilador está pronto. É hora de começar a criar nosso aplicativo. Vejamos a pasta em que o Qt wasm está instalado: no meu caso, está localizado em C: \ Qt \ 5.13.2 \ wasm_32

Execute a linha de comando com o ambiente para construir o Mingw: Inicie o mingw - selecione Qt 5.13.2 (MinGW 7.3.0 32 bits)

Ativamos nosso emsdk:

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

Entramos na pasta com o aplicativo de teste e tentamos coletar:

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


Algo deu errado? De alguma forma, não ativei corretamente a cadeia e o ambiente da montagem? Feche a linha de comando e execute-a novamente: Inicie o mingw - selecione Qt 5.13.2 (MinGW 7.3.0 32 bits) e verifique se temos 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 

Está tudo bem, o ambiente Qt é ativado e o qmake é funcional. Tentamos ativar o emsdk novamente e obtemos o mesmo erro.

Bem, pensei, você também pode fazer um amigo: primeiro execute o emsdk e ative o ambiente mingw - para isso, precisamos olhar para o atalho de lançamento do console com o ambiente mingw32 (iniciar mingw - clique com o botão direito do mouse no local do arquivo aberto - clique com o botão direito do mouse em “Qt 5.13.2 (MinGW 7.3.0 32 bits) ”- propriedades.



No objeto, estamos interessados ​​no caminho para iniciar o arquivo bat. No meu caso, é C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat

Então, começamos tudo de novo. Iniciar a execução do 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 ... vá para a pasta com o código fonte do projeto

 qmake make "make"      ,     . 

Lembramos que usamos mingw e o comando para construí-lo é diferente:
mingw32-make.exe

 mingw32-make 

O aplicativo foi montado, mas verifica se foi usado:

 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' 


Então Parar O que nós coletamos?

Criamos o aplicativo usual de 32 bits para desktop (x86) porque usamos o assembly C: \ Qt \ 5.13.2 \ mingw73_32

E precisávamos construir o WASM. Vamos ajustar o ambiente PATH para que ele pegue o caminho e o qmake da pasta wasm primeiro:

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

Limpamos a pasta dos arquivos coletados

 mingw32-make.exe clean del .qmake.stash 

Começamos a montagem

 qmake 



O que é Mais uma vez um erro? Que tipo de dll precisamos? Vamos procurá-lo na pasta onde o Qt está instalado:
Como isso pode ser? O WASM compilado de 32 bits (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) está usando uma biblioteca do MINGW de 64 bits?



Bem, suponha que você possa arriscar, adicione o caminho 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 

e ... muitos erros

mais detalhes
 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 que tantos erros? Por que você não? Limpei os arquivos temporários, iniciei a compilação e recebi muitos erros.

Então, você precisa pensar, despeje uma xícara de chá / café ...

Certo! A ideia! Porque aparentemente, escrevemos o último caminho para as bibliotecas de 64 bits como o último; então, ao criar um WASM de 32 bits, ele não entendeu como e o que vincular e tentou usar o caminho para a lib de 64 bits, o que significa que eu tinha que especificar o caminho da lib de 32 bits mais cedo do que antes 64 bits. Vou tentar consertar:

Feche o console. Abrimos o mingw 32 bits novamente e aqui o pensamento me visita: já lançamos a linha de comando para mingw 32 bits e, em seguida, substituindo o caminho para as bibliotecas por 64 bits, teremos novamente precedência ao criar o ambiente de área de trabalho Qt em componentes de 64 bits e precisamos vice-versa (porque PATH será usado até 64 bits primeiro, e até 32 bibliotecas no total). Bem, então, nosso algoritmo final será assim:

 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 

adicione o caminho para wasm e vá coletar:

 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 novo! Agora, o que há de errado comigo? Onde está esse arquivo? Para onde? Pesquisas no Explorer dizem que está em C: \ Qt \ Tools \ mingw730_32 \ bin

Bem, o mingw32-make.exe agora definitivamente será encontrado conosco:

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

Começamos a coletar:

 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 ?? Este não é o Linux, Mac, * nix, * BSD. Onde conseguir? Pesquisa (sed.exe)? .. E não encontramos.

Pegamos a Internet, procuramos (janelas de download sed) e descobrimos que ele pode ser baixado no Windows :

Faça o download dos binários Zip, descompacte na pasta bin / sed.exe e execute:





Dois erros nos componentes dll ausentes. Ainda precisamos do sed para coletar da fonte ou procurar essas DLLs ausentes? Não, eu não gostaria de fazer isso ... Mais uma vez, olhamos cuidadosamente para o site GNU e o vemos nos downloads: • Pacote completo, exceto fontes

Baixe, descompacte e instale. Tente executar:

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

Funciona !!! Resta adicioná-lo novamente ao caminho:

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

O processador foi inicializado, a montagem começou. Bem, espero que agora tenhamos sucesso!

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

Viva! Acabou. Nosso aplicativo de teste é montado. O binário Wasm leva 20 MB. Nem um pouco. Vamos tentar abrir nosso arquivo test-wasm.htm em um navegador e ...



Para resumir como criar um aplicativo Qt para 5.13.2 no Windows:



1. Você precisa instalar o Python. GNU SED e instale WebAssembly de conjuntos binários através do Qt instalado on-line

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% 

Mas o Habr não seria o Habr se eu não tivesse tentado criar o aplicativo WebAssembly a partir da versão mais recente do Qt, que atualmente é a 5.14.0 . Espero não esperar exatamente a mesma missão desde o final da versão 5.13.2.

Por meio do instalador online (MaintenanceTool.exe), instalamos o Qt WebAssembly para a versão 5.14.0. Configuramos o ambiente e executamos a montagem.

O processo continua e ...



Nada está claro. Como é isso? Para a versão 5.13.2, depois de dançar com um pandeiro, consegui montar o aplicativo, mas para o 5.14.0 não deu certo? Mas como eles montaram?

... Mas também podemos criar o WASM Qt 5.14.0 a partir da fonte? E porque não Para fazer isso, precisamos de muito espaço no disco rígido, além de uma boa carga / carga para o processador:

 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 

Nesse caso, após a montagem, teremos o wasm instalado na pasta c: \ qtwasm e ainda não precisamos coletar exemplos.

Saída de configuração
 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 

Após reconstruir o WASM Qt 5.14.0 e instalar c: \ qtwasm na pasta e usar esse caminho, consegui criar o WebAssembly a partir da versão 5.14.0 do Qt.

Conclusão 2.


Se você deseja usar o Qt 5.14.0 WebAssembly, precisará reconstruí-lo a partir das fontes e usar a versão que você já criou.

Conclusão


O Qt WebAssembly é uma tecnologia bastante interessante que apareceu no Qt desde a versão 5.12 .

Os exemplos do WebAssembly podem ser visualizados on - line no site da Qt.

No entanto, ao tentar criar meu próprio projeto, recebi erros:



Portanto, ao usar esta tecnologia, é necessário estudar suas limitações .

Módulos não suportados no momento: qtmultimedia, qtwebview.

Atualmente, o WebAssembly funciona principalmente em navegadores da área de trabalho, e quando o suporte completo é exibido em dispositivos móveis, não é conhecido.

Para aqueles que leram este artigo até o final, mas nunca experimentaram o Qt, você pode baixar o instalador online , selecionar as opções do MinGW e a versão necessária do Qt WebAssmbly. O QtCreator será instalado por padrão e você poderá criar seu primeiro aplicativo.

No final deste artigo, eu gostaria de recomendar que os usuários tentem coletar exemplos das fontes Qt, na pasta Src \ qtcharts \ examples e executá-los em um navegador.

Para iniciar o servidor da web, você pode usar o Python e executar:
python -m http.server 8000 --bind 192.168.0.10 se você tiver um endereço na rede local do computador 192.168.0.10. Além disso, não esqueça de abrir a porta no Firewall e tente abrir o aplicativo através de um navegador de outro computador / dispositivo / smartphone.

Vote e dê seus exemplos de como usar a melhor estrutura de GUI para C ++ Qt nos comentários.

Boa sorte com sua criatividade e novas conquistas!

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


All Articles