zoukankan      html  css  js  c++  java
  • Qt杂谈2.快速体验Qt for WebAssembly(Windows平台)

    1 什么是WebAssembly?

    WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行,它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C/C++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。

    2 什么是Emscripten?

    Emscripten是一个开源的编译器,可以将C/C++的代码编译后高效运行在现代浏览器上面。Emscripten的底层是基于 LLVM 编译器。

    3 安装步骤

    • 先安装Qt5.15.1并选中MinGW 8.1.0 64-bit和WebAssembly(这个是Qt编译好的WebAssembly桌面库,选了这个就不用编译源代码了,可以直接用);
    • 由于Qt5.15.1中WebAssembly是由emsdk 1.39.7版本编译的,所以我们也要安装emsdk 1.39.7,使编译器保持一致,这样才能正常使用;
    • 将emsdk目录下的.emscripten文件复制到用户目录并用绝对路径替换里面的路径,这样QtCreator才能正确识别emsdk工具链;
    • 配置MinGW环境变量,使mingw32-make.exe可识别;
    • 设置QtCreator的WebAssembly套件编译器为Emscripten Compiler。

    3.1 安装Qt5.15.1

    下载在线安装工具,qt-unified-windows-x86-3.2.3-online,至少选中红框中的两项进行安装:

    3.2 安装emsdk

    1. 获取源码git clone https://github.com/emscripten-core/emsdk.git
    2. 进入emsdk目录执行emsdk install 1.39.7
    3. 安装完成后执行emsdk activate --embedded 1.39.7

    3.3 使用前配置

    1. 将emsdk目录下的.emscripten文件复制到C:UsersAdministrator目录下(即用户目录),并修改为:
    import os
    NODE_JS = 'd:/emsdk/node/12.18.1_64bit/bin/node.exe'
    PYTHON = 'd:/emsdk/python/3.7.4-pywin32_64bit/python.exe'
    JAVA = 'd:/emsdk/java/8.152_64bit/bin/java.exe'
    LLVM_ROOT = 'd:/emsdk/upstream/bin'
    BINARYEN_ROOT = 'd:/emsdk/upstream'
    EMSCRIPTEN_ROOT = 'd:/emsdk/upstream/emscripten'
    TEMP_DIR = 'd:/emsdk/tmp'
    COMPILER_ENGINE = NODE_JS
    JS_ENGINES = [NODE_JS]
    

    这里主要是将地址改为实际的地址,用绝对路径替换,QtCreator会根据这个文件识别emsdk的配置信息,不然识别不到em编译器。

    1. 将D:QtToolsmingw810_64in目录加入环境变量,有必要,Qt for WebAssembly构建过程会使用到mingw32-make工具,不配置的话无法正常构建;
    2. 打开QtCreator配置下,我的在D:QtToolsQtCreatorinqtcreator.exe

    4 简单使用

    1. 启动QtCreator,随便打开一个项目:
    2. 选择构建套件:
    3. 构建项目:
    4. 构建完成后,生成如下文件:
    5. 在构建目录执行指令D:emsdkupstreamemscriptenemrun.bat --browser=firefox application.html在浏览器上运行一下:

    5 有何不足?

    看到上面那个图没有,我想输入中文,但是无法输入,算是支持的不够好吧,而且无法识别本地硬盘。多线程和数据库貌似也不行,这个我并未测试。

    1. 当前支持的Qt模块
    • qtbase
    • qtdeclarative
    • qtquickcontrols2
    • qtwebsockets
    • qtsvg
    • qtcharts
    • qtmqtt
    1. 当前不支持的Qt模块:
    • qtmultimedia
    • qtwebview

    其它模块未测试,可能行也可能不行。

    6 离线包下载

    鉴于安装过程过于缓慢,我将离线包上传了一份,点击下载 提取码:i5mj

  • 相关阅读:
    css取消input、select默认样式(手机端)
    Vue解决sass-loader的版本过高导致的编译错误
    在Vue项目中引入element-ui,显示结果没有样式的问题
    修改Vue项目打开指定浏览器和修改端口号
    Vue如何关闭eslint
    停止事件冒泡
    子组件中定义的方法如何传给父组件调用了呢?
    vue自定义时间过滤器之使用date-fans代替moment
    面试5(每日打卡)
    2019.10.22
  • 原文地址:https://www.cnblogs.com/luoxiang/p/13917763.html
Copyright © 2011-2022 走看看