WebAssembly 是允许在网页沙盒执行代码的二进制格式。这种格式几乎和本机代码一样快,且现在所有主流 Web 浏览器都支持。
Qt for WebAssembly 是 平台插件 ,允许构建可以被集成到网页的 Qt 应用程序。它不需要安装任何客户端,并减少服务器端资源的使用率。
emscripten is a toolchain for compiling to asm.js and WebAssembly. It lets you run Qt on the web at near-native speed without plugins.
参考 Emscripten 文档编制 for more information about checking out the Emscripten SDK and installing and activating Emscripten for your Qt version.
安装后,路径下应该有 Emscripten。采用以下命令校验这:
em++ --version
Qt 的每个子版本均支持已知的良好 Emscripten 版本。在 Qt 版本的生命周期内会支持这种 Emscripten 版本。
已知的良好版本:
使用
emsdk
去安装特定
emscripten
versions. For example, to install it for Qt 5.15, enter:
安装后,路径下应该有 Emscripten。采用以下命令校验这:
em++ --version
使用 Qt 帐户可以在 Downloads 章节下载二进制构建。
The following modules are supported by Qt for WebAssembly:
The following modules do not work:
Other modules may work, but are not supported.
另外,在 Downloads 章节可以下载 Qt 源代码,然后从它构建 Qt。
把 Qt 配置成交叉编译构建为
wasm-emscripten
platform. This will implicitly set the "-static" and "-no-feature-thread" options. Pass the
-compile-examples
option to enable examples.
./configure -xplatform wasm-emscripten -nomake examples -prefix $PWD/qtbase
在 Windows,确保您有
MinGW
及
sed
在您的
PATH
并配置如下:
configure -no-warnings-are-errors -xplatform wasm-emscripten -platform win32-g++ -nomake examples -prefix %CD%\qtbase
构建所需模块:
make module-qtbase module-qtdeclarative [other modules]
The Qt build is a static build, and does not support threads by default. Configure with
-feature-thread
to enable thread support.
$ /path/to/qt-wasm/qtbase/bin/qmake $ make
这生成下列文件:
生成的文件 | 简要描述 |
---|---|
app.html | HTML 容器 |
qtloader.js | 用于加载 Qt APP 的 JS API |
app.js | 用于加载 Qt APP 的 JS API |
app.wasm | 二进制 Emscripten APP |
当部署 APP 时,通常在服务器侧处理压缩。我们推荐压缩 wasm 二进制,因为这通常会将二进制尺寸减少 50%。
可以按以下方式测试-运行应用程序:
/path/to/emscripten/emrun --browser=firefox appname.html
The most important limitation is that the Qt build is static.
了解进一步信息,参考 Qt WebAssembly Platform Notes .
Qt for WebAssembly 在商业许可下是可用的来自 Qt 公司 。此外,它是可用的根据 GNU GPL (一般公共许可) 第 3 版 。见 Qt 许可 进一步了解细节。
另请参阅 WebAssembly 资源站点 , Qt for WebAssembly 快速入门 ,和 采用 WebGL 和 WebAssembly 的远程 UI .