qt界面嵌入web

当我第一次听说WebAssembly以及使用Qt创建Web用户界面的可能性时(就像在普通C ++中一样),我决定更深入地研究该技术。

我的开源项目Pythonic完全基于Python(PyQt),并且在工作中使用C ++。 因此,这个最小化,简单易懂的WebAssembly教程在后端使用Python,在前端使用C ++ Qt WebAssembly。 它针对像我一样不熟悉Web开发的程序员。

Header Qt C++ frontend

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功能并支持线程。

Decorated functions for WebSocket handling

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用户界面相关推荐

  1. QT入门级小项目(vs2015+qt designer混合编程)

    划重点: 在vs里面使用c++和qt designer开发一个动态计算加法的小工具. 最近想做一个界面,而且QT也是自己一直想学的东西,于是就查了一下python+qt和c++与Qt开发的方法.这篇文 ...

  2. Matplotlib画图教程:在QT界面中嵌入三维图片

    Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制.因此就诞生了做这么一个小模块的想法 ...

  3. Linux下 Qt界面程序嵌入另一个Qt界面程序_Qt应用嵌入外部进程窗口

    项目工程的实现,想要使用多个程序进行实现,在里面存在一定的调用的过程:调查的情况如下 Qt界面程序嵌入另一个Qt界面程序[Linux] Qt界面程序嵌入另一个Qt界面程序[Linux]_ptc321的 ...

  4. Qt插件开发总结5--主界面嵌入插件UI

    文章目录 一.前言 二.效果展示 三.嵌入插件UI 1.插件接口文件添加UI指针 2.插件子项目工程建立UI类 3.插件类中创建UI类.使UI指针指向创建的UI类 4.插件元信息中添加widget键值 ...

  5. C#的WinForm中嵌入Qt界面库

    C#的WinForm中嵌入Qt界面库 为何会有如此奇葩需求 一处代码,多处运行 C#有两种写界面的框架,winFrom和WPF,这二者写的界面可以相互调用,但C#编写的界面组件在非托管C++虽然理论上 ...

  6. Qt界面编程(一)—— Qt概述、Qt的安装和环境变量的配置、Qt程序简单说明

    1. Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立图形界面所需的所有功能.它是完全面向对象的,很容易扩展,并且允许真正的组件编程. 1.2 ...

  7. Linux下Qt窗口半透明,Qt实现嵌入桌面的半透明窗口 good

    一.将Qt窗口嵌入到桌面中. 声明一个最简单的类: class Dialog : public QDialog {         Q_OBJECT public:         Dialog(QW ...

  8. 字符编码、QString编码、Qt界面乱码问题总结

    目录 一.术语解释 1.编辑器(editor) 2.编译器(compiler) 3.源文件字符编码 4.执行文件字符编码 5.Unicode 二.Qt中的字符串 1.char*和std::string ...

  9. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

最新文章

  1. 型人格 disc测试_什么是压抑型人格,如何测试筛查压抑型人格?
  2. HDU4970 Killing Monsters dp
  3. Django学习(一)
  4. 深入理解JVM内存区域与内存分配
  5. android jni开发方式
  6. .NET实时2D渲染入门·动态时钟
  7. 同前端联调过程中遇到的坑
  8. UnrealEngine4 PBR Shading Model 概述
  9. 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加
  10. 服务器如何自动校准北京时间,北京时间
  11. 一种由视频和音频共同驱动的说话人脸合成方法简介
  12. Ubuntu18.04+思岚激光雷达A2M7+ROS测试
  13. 读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)
  14. 通用商城系统V5.0
  15. arcengine双击属性表内的一行,定位到该要素,并添加到选择集
  16. python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...
  17. python编码的种类以及转换以及bytes数据类型的介绍
  18. 视频剪辑学习笔记(1)
  19. windows执行cygwin慢问题
  20. 爬虫实战-肯德基kfc门店地址实战

热门文章

  1. Script 入门实践
  2. 关于Ribbon的几个问题
  3. SpringCloud 使用Zuul构建微服务网关
  4. 六招教你快速提升网站交互体验,降低跳出率
  5. 第4章字符串的实现-勘误
  6. Qt学习: QFileDialog和QMessageBox的用法和程序示例
  7. docker使用centos镜像
  8. [APUE]进程控制(中)
  9. AngularJs 1.5 $location获取url参数
  10. [20150828]插入commit scn到记录.txt