Qt рдПрд╡рд░реАрд╡реЗрдпрд░ - рдпрд╣ Qt рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИред WebAssembly рдФрд░ WebGL рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ 5.12.0 рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдЧрддрд╛ рд╣реИред рддреЛ рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдкрд░ рдПрдХ рдЪреИрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд░реНрдерди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ WebAssembly рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдВрдЧреЗ, C ++ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
WebAssembly рдХреЗ рд╕рд╛рде Qt рд╡рд┐рдзрд╛рдирд╕рднрд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЯреВрд▓рдХрд┐рди рдИрд╕реНрдорд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдХреНрдпреВрдЯреА рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗред рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ рддрд╛рдХрд┐ qmake emcc рдкрд╛рддрд╛ рд╣реИред configure
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдИ рдЧрдИ рдереА:
./configure \ -prefix /home/dmitry/Qt/5.12.0/wasm \ -xplatform wasm-emscripten \ -confirm-license -opensource \ -nomake tests \ -c++std c++1z \ -nomake examples \ -release \ -no-dbus \ -skip qtxmlpatterns \ -skip qttools
рдЖрдЧреЗ рдХрд╣реАрдВ рдФрд░:
$ make $ make install
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн
$ ~/Qt/5.12.0/wasm/bin/qmake $ make $ emrun chat.html
Url рдХреЛ рд╕рд┐рд▓рд╛рдИ рдЬрд┐рд╕ рдкрд░ рдмреИрдХреЗрдВрдб рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдордирдорд╛рдирд╛ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП location.hostname
рдФрд░ location.port
рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмреИрдХрдПрдВрдб рдХрд╣рд╛рдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, Q_OS_WASM
, рд▓реЗрдХрд┐рди рдореИрдВ Q_OS_WASM
рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдирд┐рдХрд╛рд▓рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдкрд┐рдореНрдкрд▓ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╣реА рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрдб рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдлреИрд▓рд╛ рджреВрдВрдЧрд╛
рдЪрд▓реЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдорд┐рд▓рддрд╛ рд╣реИ
рдФрд░ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдпрд╣ рдкреНрд░реЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ
wasm { SOURCES += config_wasm.cpp } else { SOURCES += config.cpp }
EM_ASM_
рдЬрд╛рджреВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ C ++ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
emscripten::val location = emscripten::val::global("location"); auto host = QString::fromStdString(location["host"].as<string>()); auto protocol = QString::fromStdString(location["protocol"].as<string>());
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди
рдбреЗрд╕реНрдХрдЯреЙрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдпрд╣ рдХреНрд░реЛрдо, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рд╕рдлрд╛рд░реА, рдПрдЬ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдпрд╣рд╛рдБ рдореБрдЭреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдерд╛)ред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, WebAssembly рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред
рдХреНрд░реЛрдо рдСрди рдПрдВрдбреЛрд░рд┐рдб рдореЗрдВ, WebAssembly рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рддреБрд░рдВрдд рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдХрдореА рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЕрд░реНрдерд╛рддреН рдкрд╛рда рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рд╕рд┐рд╕реНрдЯрдо рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИред
рдЖрдИрдУрдПрд╕ 12 рдкрд░ рд╕рдлрд╛рд░реА рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдХрд▓рди рд╡реЗрдмрдЕрд╡реЗрд╢рди рдХреЗ рдЪрд░рдг рдореЗрдВ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдбреАрдмрдЬрд╣рд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк asm.js рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЕрдзреНрдпрдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
Qt рддреНрд╡рд░рд┐рдд рд╡реЗрдмрдЬреАрдПрд▓
рд╡реЗрдмрд▓реЙрдЧ рдкрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдЧ рдиреЗ рдЦреБрдж рдХреЛ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдкрд░ VNC рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ред рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ Qt WebSockets рдФрд░ Qt OpenGL ES 2 рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдмрд┐рдирд╛ GPU рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧреАред рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдСрдирд▓рд╛рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдореЗрдВ Qt WebGL рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд▓рдЧрд┐рди -platform webgl
рдФрд░ -platform webgl
рдпрд╛ -platform webgl:port=80
-platform webgl
рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдПрдБ -platform webgl:port=80
рд╡рд┐рдХрд▓реНрдк рдпрджрд┐ рдЖрдкрдХреЛ рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕ рддрдХрдиреАрдХ рдХреА рдЕрдкрдиреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:
- рджреЗрд░реА рдпрд╛ рдХреБрдЦреНрдпрд╛рдд рдЗрдирдкреБрдЯ рдЕрдВрддрд░рд╛рд▓;
- рдХреНрдпреВрдЯреА рд╡рд┐рдЬреЗрдЯ рдкрд░ рдЖрд╡реЗрджрди рд╕рдорд░реНрдерди рдХреА рдХрдореА;
- рдзреНрд╡рдирд┐ рд╕рдВрдЪрд░рдг рдХреА рдХрдореА;
- рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛рдиреА рджреВрд╕рд░реЗ рдЯреИрдм рдореЗрдВ рдЕрдм рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдкреНрд░реАрд▓реЛрдбрд░ рд╕реНрдкрд┐рди рдХрд░реЗрдЧрд╛ред
рдЬрдм рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдмрджрд▓рд╛рд╡ рдкрд░ StackView рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдПрдлрдкреАрдПрд╕ рд╕реИрдЧрд┐рдВрдЧ рдХреЛ рднреА рджреЗрдЦрд╛ред WebGL рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн:
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд░реНрд╡рд░;
- рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ред рдореБрдЭреЗ рдХреНрдпреВрдЯреА рдХреЛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред
WebAssembly рдФрд░ WebGL рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ
W ++ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЬрдм C ++ рдореЗрдВ рд░реЗрдбреАрдореЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд╛рд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЛрд░реЗрдВрдЯ рд░реЙрдХрд┐рдВрдЧ рдЪреЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред
рдХреБрдЫ рд╕реНрдорд╛рд░реНрдЯ рдШрд░ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдХрд┐ MQTT рдХреЛ Qt рддрдХ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди msorvig / qt-webassembly- рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг mqtt_simpleclient рд╣реИ ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп UI рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдмрд▓реЗрдЯ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ , рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рддреИрдпрд╛рд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ ред