Qt5.15.2实现Qt for WebAssembly与示例
目录
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 项目
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 编译过程
-
使用 Emscripten 工具链将 Qt 应用程序的 C++ 代码编译为 WebAssembly 格式。
-
生成
.wasm文件(WebAssembly 二进制文件)和.js文件(JavaScript 胶水代码)。 -
通过 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
-
下载并安装 Qt 安装程序(Qt 5.15 或更高版本)。
-
在安装过程中,选择
Qt for WebAssembly模块。
2.3 配置 Emscripten
-
下载并安装 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 作为构建套件。

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
希望知道怎么解决的朋友可以分享一下。
相关文章:
Qt5.15.2实现Qt for WebAssembly与示例
目录 1.什么是Qt for WebAssembly? 1.1 什么是 WebAssembly? 1.2 WebAssembly 的优势 1.3 什么是 Qt for WebAssembly? 1.4 Qt for WebAssembly 的特点 1.5 编译过程 1.6 运行时环境 注意!!!注意&am…...
好吧好吧,看一下达梦的模式与用户的关系
单凭个人感觉,模式在达梦中属于逻辑对象合集,回头再看资料 应该是一个用户可以对应多个模式 问题来了,模式的ID和用户的ID一样吗? 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…...
HOW - DP 动态规划系列(三)(含01背包问题)
目录 一、01背包问题最直接的暴力解法动态规划解法 二、完全背包 通过几个算法的学习,理解和掌握动态规划来解决背包问题。 一、01背包问题 对于面试的话,掌握01背包和完全背包就够用了,最多可以再来一个多重背包。 如果这几种背包分不清&…...
Linux的文件上传下载的lrzsz库的安装与使用
以下是关于 Linux 下 lrzsz 库的安装与使用 的详细指南,适用于通过终端(如 SecureCRT、Xshell、MobaXterm 等)使用 ZMODEM 协议快速上传和下载文件: 一、lrzsz 简介 功能:提供 rz(接收文件)和 …...
在linux服务器部署Heygem
前言: Heygem官方文档上提供了基于windwos系统的安装方案。在实际使用过程中个人电脑的配置可能不够。这个时候如果服务器配置够的话,可以尝试在服务器上装一下。但是服务器一般都是linux系统的,于是这篇教程就出现了… 可行性分析 通读安装…...
图书管理系统系统-Java、SpringBoot、Vue和MySQL开发的图书馆管理系统
「springboot、vue图书馆管理系统.zip」 链接:https://pan.quark.cn/s/5a929a7e9450 分享一个图书管理系统,Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 以下是对文本内容的总结: 项目概述 项目名称与背景: 项目概述 项…...
学生管理系统(需求文档)
需求: 采取控制台的方式去书写学生管理系统 分析: 初始菜单: “----------欢迎来到java学生管理系统----------” “1:添加学生” “2:删除学生” “3:修改学生” “4:查询学生” “5:…...
[c语言日寄]数据输入
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
CMake-环境变量介绍
文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量,但也有些不同,如下: 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量,例如$ENV{<name>}ÿ…...
数据预处理流程与关键步骤解析
数据预处理流程图(Markdown格式): #mermaid-svg-b3mhJcpFWaJ9qMZ8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-b3mhJcpFWaJ9qMZ8 .error-icon{fill:#552222;}#mermaid-svg-b3m…...
字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)
DAPO算法:解锁大规模LLM强化学习的新篇章 近年来,大规模语言模型(LLM)在推理任务上的表现令人瞩目,尤其是在数学竞赛(如AIME)和编程任务中,强化学习(RL)成为…...
计算机操作系统(四) 操作系统的结构与系统调用
计算机操作系统(四) 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结(核心概念速记)…...
Docker安装,并pullMySQL和redis
卸载原Docker 您的 Linux 发行版可能提供非官方的 Docker 软件包,这可能与 Docker 提供的官方软件包冲突。在安装 Docker Engine 正式版之前,您必须先卸载这些软件包。 sudo dnf remove docker \ docker-client \ docker-client-latest \ docker-common…...
第三天 开始Unity Shader的学习之旅之第二天的补充
Unity Shader的学习笔记 第三天 开始Unity Shader的学习之旅之第二天的补充 文章目录 Unity Shader的学习笔记前言一、Unity 提供的内置文件和变量1. 内置的包含文件2. UnityCG.cginc中的常用结构体 二、Unity 提供的Cg/HLSL语义1. 从应用阶段传递模型数据给顶点着色器时Unity…...
DeepSeek技术架构解析:MoE混合专家模型
一、前言 2025年初,DeepSeek V3以557万美元的研发成本(仅为GPT-4的1/14)和开源模型第一的排名,在全球AI领域掀起波澜。其核心创新之一——混合专家模型(Mixture of Experts, MoE)的优化设计,不…...
【正点原子】AI人工智能深度学习(RV1126/RK3568/RK3588)-第1期 准备篇
1.1SDK编译后的目录 1、真正的根文件系统镜像存放目录 2、非必须,负责系统升级等,kerneldtbramdisk组成的根文件系统 1.2文件系统分区 1.3开机自启动 1.6设置静态ip地址 1.8RKMedia框架/编译测试SDK自带RKMedia例程 出厂系统以下内容都是默认…...
PCB沉金和镀金的区别
本文通过多方面角度对比两者的区别。 一.成本和工艺复杂度 沉金:成本较高,制作过程中消耗的金盐多。工艺的参数控制上较严格,需防止“黑盘效应”。 黑盘效应:是指在PCB(印刷电路板)的化学镀镍金…...
靶场(十五)---小白心得思路分析---LaVita
启程: 扫描端口,发现开放22,80端口,发现ws.css可能存在exp,经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...
【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解
目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek 通义万相制作AI视频流程 4.1 D…...
Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例
我们前文已经深度解读了三角形、梯形、高斯、S型和Z型隶属函数,现在转向Pi型。当然我们先简要回顾不同隶属函数的特点和曲线效果。了解每种隶属函数的特性是为了更好的应用。 一、回顾五种隶属函数的特点 1.从每种隶属函数的结构和特点角度对比。三角形隶属函数&am…...
MySQL 入门大全:常用函数
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁
在数字化浪潮席卷全球的今天,数据隐私与传输安全已成为企业及个人的核心关切。TLS(传输层安全协议)作为互联网通信的"隐形卫士",承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而,对于许多传统服务…...
SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)
目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) (1)安装axios。(vue工程目录) (2)封装请求工具类。(request.js) <1&…...
AF3 Rotation 类解读
Rotation 类(rigid_utils 模块)是 AlphaFold3 中用于 3D旋转 的核心组件,支持两种旋转表示: 1️⃣ 旋转矩阵 (3x3) 2️⃣ 四元数 (quaternion, 4元向量) 👉 设计目标: 允许灵活选择 旋转矩阵 或 四元数 封装了常用的 旋转操作(组合、逆旋转、应用到点上等) 像 torch.…...
JVM垃圾回收笔记02-垃圾回收器
文章目录 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相关参数-XX:UseSerialGC 2.吞吐量优先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相关参数-XX:UseParallelGC ~ -XX:UseParallelOldGC-…...
Linux上位机开发实战(编写API库)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 我们自己编写linux上位机软件的时候,尽量都是通过框架库的形式来开发。这就是所谓的低耦合,高内聚。相似的功能、模块和算法…...
深入浅出JVM性能优化:从理论到实践
一、JVM架构与内存模型深度解析 1.1 JVM运行时数据区全景图 方法区(元空间):存储类信息、常量池等元数据堆内存:对象实例存储核心区域 Young Generation(新生代) Eden区(对象诞生地࿰…...
Redis Sentinel 详解
Redis Sentinel 详解 1. 什么是 Redis Sentinel?有什么用? Redis Sentinel(哨兵) 是 Redis 官方提供的高可用性解决方案,主要用于监控、通知和自动故障转移。当 Redis 主节点(master)发生故障…...
器件功耗模型原理
器件功耗模型原理 谷歌提供了一套通用的器件耗电模型和配置方案,先对器件进行耗电因子拆解,建立器件功耗模型,得到一个器件耗电的计算公式。通过运行时统计器件的使用数据,代入功耗模型,就可以计算出器件的功耗。例如…...
拥抱成长型思维:解锁持续进步的人生密码
我强烈推荐4本可以改变命运的经典著作: 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 一、什么是成长型思维? 成长型思维(Growth Mindset)由斯坦福大学心理学家卡…...

