qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面
qt界面嵌入web
当我第一次听说WebAssembly以及使用Qt创建Web用户界面的可能性时(就像在普通C ++中一样),我决定更深入地研究该技术。
我的开源项目Pythonic完全基于Python(PyQt),并且在工作中使用C ++。 因此,这个最小化,简单易懂的WebAssembly教程在后端使用Python,在前端使用C ++ Qt WebAssembly。 它针对像我一样不熟悉Web开发的程序员。
TL; DR
git clone https://github.com/hANSIc99/wasm_qt_example
cd wasm_qt_example
python mysite.py
然后使用您喜欢的浏览器访问http://127.0.0.1:7000 。
什么是WebAssembly?
WebAssembly(通常简称为Wasm)主要用于在Web应用程序中执行可移植的二进制代码,以实现高执行性能。 它旨在与JavaScript共存,并且两个框架都在同一沙箱中执行。 最新的性能基准表明,根据浏览器的不同,WebAssembly的执行速度大约可提高10–40%,并且鉴于其新颖性,我们仍然可以期待改进。 这种出色的执行性能的缺点是其被广泛用作首选的恶意软件语言。 加密矿工由于其二进制格式而特别受益于其性能和更难发现的证据。
工具链
Qt Wiki上有入门指南 。 我建议完全遵循本指南中提到的步骤和版本。 您可能需要仔细选择Qt版本,因为不同的版本具有不同的功能(例如多线程),并且每个版本都有改进。
要获取可执行的WebAssembly代码,只需通过Emscripten传递Qt C ++应用程序。 Emscripten提供了完整的工具链,构建脚本再简单不过了:
#!/bin/sh
source ~ / emsdk / emsdk_env. sh
~ / Qt / 5.13.1 / wasm_32 / bin / qmake
make
与标准C ++编译器(例如Clang或g ++)相比,构建所需的时间大约长10倍。 构建脚本将输出以下文件:
WASM_Client.js
WASM_Client.wasm
qtlogo.svg
qtloader.js
WASM_Client.html
Makefile(中级)
我的(Fedora 30)构建系统上的版本是:
emsdk:1.38.27
Qt:5.13.1
前端
前端提供了一些基于WebSocket的功能。
将消息发送到服务器:使用WebSocket将简单的字符串消息发送到服务器。 您也可以通过简单的HTTP POST请求来完成此操作。
启动/停止计时器:创建WebSocket并在服务器上启动计时器,以定期将消息发送到客户端。
上载文件:将文件上载到服务器,该文件将保存到运行服务器的用户的主目录( 〜/ )中。
如果您修改代码并遇到如下编译错误:
error: static_assert failed due to
requirement ‘bool(-1 == 1)’ “Required feature http for file
../../Qt/5.13.1/wasm_32/include/QtNetwork/qhttpmultipart.h not available.”
QT_REQUIRE_CONFIG(http);
这意味着请求的功能不适用于Qt Wasm。
后端
服务器工作由Eventlet完成。 我选择Eventlet是因为它重量轻且易于使用。 Eventlet提供WebSocket功能并支持线程。
在mysite / template下的存储库内部,根路径中有一个指向WASM_Client.html的符号链接。 mysite / static下的静态内容也链接到存储库的根路径。 如果修改代码并重新编译,则只需重新启动Eventlet即可将内容更新到客户端。
Eventlet使用Python的Web服务器网关接口(WSGI)。 装饰器扩展了提供特定功能的功能。
请注意,这是绝对最低的服务器实现。 它没有实现任何多用户功能-每个客户端都可以启动/停止计时器,即使对于其他客户端也是如此。
结论
以该示例代码为起点,熟悉WebAssembly,而不会在次要问题上浪费时间。 我不要求完整性或最佳实践集成。 我经历了漫长的学习过程,直到获得满意的结果,我希望这可以使您简要了解这一有前途的技术。
翻译自: https://opensource.com/article/20/2/wasm-python-webassembly
qt界面嵌入web
qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面相关推荐
- QT入门级小项目(vs2015+qt designer混合编程)
划重点: 在vs里面使用c++和qt designer开发一个动态计算加法的小工具. 最近想做一个界面,而且QT也是自己一直想学的东西,于是就查了一下python+qt和c++与Qt开发的方法.这篇文 ...
- Matplotlib画图教程:在QT界面中嵌入三维图片
Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制.因此就诞生了做这么一个小模块的想法 ...
- Linux下 Qt界面程序嵌入另一个Qt界面程序_Qt应用嵌入外部进程窗口
项目工程的实现,想要使用多个程序进行实现,在里面存在一定的调用的过程:调查的情况如下 Qt界面程序嵌入另一个Qt界面程序[Linux] Qt界面程序嵌入另一个Qt界面程序[Linux]_ptc321的 ...
- Qt插件开发总结5--主界面嵌入插件UI
文章目录 一.前言 二.效果展示 三.嵌入插件UI 1.插件接口文件添加UI指针 2.插件子项目工程建立UI类 3.插件类中创建UI类.使UI指针指向创建的UI类 4.插件元信息中添加widget键值 ...
- C#的WinForm中嵌入Qt界面库
C#的WinForm中嵌入Qt界面库 为何会有如此奇葩需求 一处代码,多处运行 C#有两种写界面的框架,winFrom和WPF,这二者写的界面可以相互调用,但C#编写的界面组件在非托管C++虽然理论上 ...
- Qt界面编程(一)—— Qt概述、Qt的安装和环境变量的配置、Qt程序简单说明
1. Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立图形界面所需的所有功能.它是完全面向对象的,很容易扩展,并且允许真正的组件编程. 1.2 ...
- Linux下Qt窗口半透明,Qt实现嵌入桌面的半透明窗口 good
一.将Qt窗口嵌入到桌面中. 声明一个最简单的类: class Dialog : public QDialog { Q_OBJECT public: Dialog(QW ...
- 字符编码、QString编码、Qt界面乱码问题总结
目录 一.术语解释 1.编辑器(editor) 2.编译器(compiler) 3.源文件字符编码 4.执行文件字符编码 5.Unicode 二.Qt中的字符串 1.char*和std::string ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
最新文章
- 型人格 disc测试_什么是压抑型人格,如何测试筛查压抑型人格?
- HDU4970 Killing Monsters dp
- Django学习(一)
- 深入理解JVM内存区域与内存分配
- android jni开发方式
- .NET实时2D渲染入门·动态时钟
- 同前端联调过程中遇到的坑
- UnrealEngine4 PBR Shading Model 概述
- 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加
- 服务器如何自动校准北京时间,北京时间
- 一种由视频和音频共同驱动的说话人脸合成方法简介
- Ubuntu18.04+思岚激光雷达A2M7+ROS测试
- 读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)
- 通用商城系统V5.0
- arcengine双击属性表内的一行,定位到该要素,并添加到选择集
- python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...
- python编码的种类以及转换以及bytes数据类型的介绍
- 视频剪辑学习笔记(1)
- windows执行cygwin慢问题
- 爬虫实战-肯德基kfc门店地址实战