Qt5.15.2实现Qt for WebAssembly与示例

embedded/2025/3/22 2:24:27/

目录

1.什么是Qt for WebAssembly?

1.1 什么是 WebAssembly?

1.2 WebAssembly 的优势

1.3 什么是 Qt for WebAssembly?

1.4 Qt for WebAssembly 的特点

1.5 编译过程

1.6 运行时环境

注意!!!注意!!!注意!!!Qt版本和Emscripten版本有对应关系,在官方文档里就给出了最适合的版本,比如Qt5.15.2和Emscripten1.39.8版本合适

2.环境准备

2.1 安装python3.9.0

2.2 安装 Qt for WebAssembly

2.3 配置 Emscripten

3.编译生成

3.1 创建和编译项目

3.2 在 Qt Creator 中创建一个新的 Qt 项目

wasm%C2%A0%E5%92%8C%C2%A0.js%C2%A0%E6%96%87%E4%BB%B6-toc" name="tableOfContents" style="margin-left:80px">3.3 编译项目,生成 .wasm 和 .js 文件

4.运行示例

4.1 编译生成内容

4.2 运行项目

5.遗留问题


1.什么是Qt for WebAssembly?

Qt for WebAssembly 是 Qt 框架的一个模块,它允许开发者将 Qt 应用程序编译为 WebAssembly(Wasm)格式,从而可以在现代 Web 浏览器中运行。WebAssembly 是一种低级的二进制指令格式,旨在为 Web 提供高性能的执行环境。通过 Qt for WebAssembly,开发者可以使用 Qt 的强大功能(如 GUI、网络、文件系统等)来构建跨平台的 Web 应用程序。

1.1 什么是 WebAssembly?

  • WebAssembly(Wasm) 是一种基于堆栈的虚拟机的二进制指令格式,旨在为 Web 提供高性能的执行环境。

  • 它允许开发者使用 C、C++、Rust 等语言编写代码,并将其编译为 Wasm 格式,在浏览器中运行。

  • WebAssembly 的主要目标是实现接近原生的性能,同时保持与 Web 平台的兼容性。

1.2 WebAssembly 的优势

  • 高性能:接近原生的执行速度。

  • 跨平台:可以在所有现代浏览器中运行。

  • 安全性:运行在浏览器的沙盒环境中,确保安全性。

  • 可移植性:支持多种编程语言(如 C、C++、Rust 等)。

1.3 什么是 Qt for WebAssembly?

  • Qt for WebAssembly 是 Qt 框架的一个模块,它允许将 Qt 应用程序编译为 WebAssembly 格式。

  • 通过 Qt for WebAssembly,开发者可以使用 Qt 的强大功能(如 GUI、网络、文件系统等)来构建跨平台的 Web 应用程序。

  • 它特别适合将现有的 Qt 桌面应用程序移植到 Web 平台。

1.4 Qt for WebAssembly 的特点

  • 跨平台:可以在所有现代浏览器中运行。

  • 高性能:利用 WebAssembly 的高性能特性。

  • 丰富的功能:支持 Qt 的核心模块(如 Qt Core、Qt GUI、Qt Widgets 等)。

  • 易于移植:现有的 Qt 应用程序可以相对容易地移植到 WebAssembly。

1.5 编译过程

  1. 使用 Emscripten 工具链将 Qt 应用程序的 C++ 代码编译为 WebAssembly 格式。

  2. 生成 .wasm 文件(WebAssembly 二进制文件)和 .js 文件(JavaScript 胶水代码)。

  3. 通过 HTML 文件加载和运行 WebAssembly 应用程序。

1.6 运行时环境

  • WebAssembly 应用程序运行在浏览器的沙盒环境中。

  • Qt for WebAssembly 使用 Emscripten 提供的 API 与浏览器进行交互(如 DOM 操作、文件系统访问等)。

人话就是把某些qt实现的桌面程序编译成wasm支持的web形式,但存在局限性。

感兴趣的也可以自己去看看:QT官方5.15.2的说明文档

注意!!!注意!!!注意!!!Qt版本和Emscripten版本有对应关系,在官方文档里就给出了最适合的版本,比如Qt5.15.2和Emscripten1.39.8版本合适

不然你可能在后面都配置好了之后,发现编译报错

[Makefile:74: .\TestWebAssembly.js] Error 1

具体原因这个博主解释了,主要是js的语法适配问题

接下来我主要描述怎么在windows版本下进行环境准备。

2.环境准备

2.1 安装python3.9.0

2.2 安装 Qt for WebAssembly

  1. 下载并安装 Qt 安装程序(Qt 5.15 或更高版本)。

  2. 在安装过程中,选择 Qt for WebAssembly 模块。

2.3 配置 Emscripten

  1. 下载并安装 Emscripten 工具链。

先克隆Emscripten的sdk仓库

git clone https://github.com/emscripten-core/emsdk.git

cd到刚刚克隆的文件夹下,进行安装激活与查看版本,需要下载一些东西

.\emsdk install 1.39.8

.\emsdk activate 1.39.8

emcc --version

em++ --version

正确的情况下应该会看到:

2.配置 Emscripten 的环境变量。

自动利用脚本配置

.\emsdk_env.bat

手动配置

3.编译生成

3.1 创建和编译项目

1.在Qt中配置启用webassembly编译器

先要配置设备中的路径,这个时候Qt自己会识别版本。

重启QtCreator之后,就会在编译器中看到有对应的版本的C和C++的编译器

如果没有的话,就自己添加

调试器的话,其实不支持调试,所以有没有都无所谓,可以无视警告黄色感叹号。

3.2 在 Qt Creator 中创建一个新的 Qt 项目

这个时候,可以勾选两个编译器,因为我使用的时候,切换到webassembly编译器的时候,就无法加载出来pro中加入的文件了,可以先把项目运行好在切换成webassembly编译器编译就行。

选择 WebAssembly 作为构建套件。

    wasm%C2%A0%E5%92%8C%C2%A0.js%C2%A0%E6%96%87%E4%BB%B6" name="3.3%20%E7%BC%96%E8%AF%91%E9%A1%B9%E7%9B%AE%EF%BC%8C%E7%94%9F%E6%88%90%C2%A0.wasm%C2%A0%E5%92%8C%C2%A0.js%C2%A0%E6%96%87%E4%BB%B6">3.3 编译项目,生成 .wasm 和 .js 文件

    4.运行示例

    4.1 编译生成内容

    TestWebAssembly/
    ├── TestWebAssembly.html       # HTML 入口文件
    ├── TestWebAssembly.js         # JavaScript 胶水代码
    ├── TestWebAssembly.wasm       # WebAssembly 二进制文件
    ├── TestWebAssembly.data       # 静态资源文件(可选)
    ├── TestWebAssembly.wasm.map   # WebAssembly 源映射文件(可选)
    ├── TestWebAssembly.js.map     # JavaScript 源映射文件(可选)
    └── TestWebAssembly.worker.js  # Web Worker 文件(可选)

    4.2 运行项目

    如果走到这一步,你直接打开了html的话,就会看到这样的画面

    这就需要使用web服务器的方式加载才可以

    4.2.1使用 Web 服务器(如 Python 内置 HTTP 服务器)运行生成的 .html 文件。

    4.2.2在浏览器中打开 .html 文件,运行 WebAssembly 应用程序。

    http://localhost:8000/TestWebAssembly.html

    5.遗留问题

    出现了中文乱码问题,尚未解决,看过一些教程,说是Qt自带的三种字体并不支持中文,所以需要自己加载字体。

    Qt 字体加载、图标字体的使用 | 解决 Qt for WebAssembly 中文字体问题_哔哩哔哩_bilibili

    希望知道怎么解决的朋友可以分享一下。


    http://www.ppmy.cn/embedded/174574.html

    相关文章

    DockerFile制作-python

    例如,一个简单的Dockerfile可能如下所示: 【Dockerfile】 # 使用官方Python基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的所有文件到容器的/app目录 COPY . /app # 安装依赖 RUN pip install --no-cache-dir -r req…

    windows+ollama+deepseek+openwebui快速实现本地部署Deepseek

    文章目录 1. DeepSeek-R1全版本及硬件要求2. 安装Ollama2.1 官方下载(不推荐)2.2 国内镜像加速(推荐)2.3 验证安装 3. DeepSeek模型部署3.1 拉取模型3.2 测试运行 4. Open WebUI可视化部署4.1 安装包4.2 启动服务4.3 访问界面 5. 结论6. 实际参数参考6.1 我的电脑配置6.2 我的版…

    大模型应用中如何保持实时性和多人对话一致性问题?

    环境: 大模型 问题描述: 大模型应用中如何保持实时性和多人对话一致性问题? 解决方案: 在实时性和多人对话一致性问题上,你的总结已较为全面,但可进一步细化技术细节、补充前沿方案并强化落地权衡。以…

    Spring Boot 配置属性 (Configuration Properties) 详解:优雅地管理应用配置

    引言 Spring Boot 的 配置属性 (Configuration Properties) 是其另一个核心特性,它提供了一种 类型安全、结构化 的方式来管理应用的配置信息。 与自动配置相辅相成,配置属性允许开发者 以声明式的方式将外部配置 (如 properties 文件、YAML 文件、环境…

    文体制造行业的现状 内检实验室lims系统在文体制造行业的应用

    在文体用品制造业,产品质量的控制是企业生存和发展的关键。随着市场竞争的日益激烈,企业对产品的品质要求也越来越高。然而,传统实验室管理方式存在着诸多问题,如数据不准确、流程不规范、效率低下等。这些问题严重影响了企业的生…

    数学建模 第三节

    目录 前言 一 钻井布局问题 第一问分析 第二问分析 总结 前言 这里讲述99年的钻井布局问题,利用这个问题讲述模型优化,LINGO,MATLAB的使用 一 钻井布局问题 这个是钻井布局的原题,坐标的位置为 a [0.50,1.41,3.00,3.37,3…

    微信小程序计算属性与监听器:miniprogram-computed

    小程序框架没有提供计算属性相关的 api ,但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能: 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下,使用如下命令,…

    汇川EASY系列之以太网通讯(MODBUS_TCP做主站)

    汇川Easy系列以太网通讯中(MODBUSTCP,plc做主站),终于可以不用使用指令就可以完成了,全程通过简单的配置就可通讯。本文将通过EASY系列PLC与调试助手之间完成此操作。具体演示如下; 关于主站和从站的介绍 A/请求:即主动方 向被动方发送的一个要求的信息。 B/主站:发…