qt qprocess 判断程序已经调用成功_Qt与Web混合开发(二)建立连接

本文是《Qt与Web混合开发》系列的第二篇,探讨了Qt与Web的嵌套使用,以MiniBrowser为例展示了Qt QML中嵌套WebView的实现。接着介绍了Qt与Web分离的实现,通过WebSocket和QWebSocket进行通信。重点讨论了WebChannel技术,用于在Qt和Web之间建立通信,讲解了WebSocket原理和QWebSocket的使用,以及在TypeScript中如何利用QWebChannel进行交互。此外,还提供了Qt启动系统浏览器和C# .NET的Process::Start方法传递参数的技巧。
摘要由CSDN通过智能技术生成

前言

《Qt与Web混合开发》系列文章,主要讨论Qt与Web混合开发相关技术。

这类技术存在适用场景,例如:Qt项目使用Web大量现成的组件/方案做功能扩展,

Qt项目中性能无关/频繁更新迭代的页面用html单独实现,Qt项目提供Web形式的SDK给

用户做二次开发等等,或者是Web开发人员齐全而Qt/C++人手不足,此类非技术问题,

都可以使用Qt + Web混合开发。

(不适用的请忽略本文)

简介

第二篇文章,先介绍Qt与Web嵌套使用,再介绍Qt与Web分开使用,之后着重讨论分开使用的一些实现细节,特别是WebChannel通信、WebChannel在Web/typescript中的使用。

Qt与Web嵌套

MiniBrowser

这里以Qt官方的例子MiniBrowser来说明吧。

打开方式如下:

0dfa2cbe6d0fcd2a02927485bba1a593.png

运行效果如下:

c3a7497ce9f0f3404ff9dc74e5369c4c.png

这个例子是在Qml中嵌套了WebView。

半透明测试

涛哥做了一个简单的半透明测试。

增加了两个半透明的小方块,蓝色的在WebView上面,红色的在WebView下面。

运行效果也是正确的:

e118b243903b171c63c9da5699f60f83.png

代码是这样的:

cb6de7538c7dccf648a7d6717a91f0a2.png

红色框中是我增加的代码。

为什么要做半透明测试呢?根据以往的经验,不同渲染方式的两种窗口/组件嵌套在一起,总会出现透明失效之类的问题,例如 qml与Widget嵌套。

渲染原理

涛哥翻了一下Qt源码,了解到渲染的实现方式,Windows平台大致如下:

chromium在单独的进程处理html渲染,并将渲染结果存储在共享内存中;主窗口在需要重绘的时候,从共享内存中获取内容并渲染。

小结

这里的WebView内部封装好了WebEngine,其本身也是一个Item,就和普通的Qml一样,属性绑定、js function都可以正常使用,暂时不深入讨论了。

Qt与Web分离

Qt与Web分离,就是字面意思,Web在单独的浏览器或者App中运行,不和Qt堆在一起。两者通过socket进行通信。

这里用我自己做的例子来说明吧。

(...微信公众号把gif图片吃掉了...)

源码在github上: https://github.com/jaredtao/QtWeb

Qt小车

原版小车

小车来自Qt的D-Bus Remote Controller 例子

7f0a204a366053f5105676e0abe7f440.png

原版的例子,实现了通过QDBus 跨进程 控制小车。

(吐槽:这是一个古老的例子,使用了GraphicsView 和QDBus)

(知识拓展1:DBus是unix系统特有的一种进程间通信机制,使用有些复杂。

Qt对DBus机制进行了封装/简化,即QDBus模块,

通过xml文件的配置后,把DBus的使用转换成了信号-槽的形式。

类似于现在的Qt Remote Objects)

(知识拓展2:Windows本身不支持DBus,网上有socket模拟DBus的方案。

参考: freedesktop.org/wiki/So)

改进小车

我做了一些修改,主要如下:

  • 去掉了DBus

  • 增加控制按钮

  • 增加WebChannel

  • 修改Car的实现,导出一些属性和函数。

  • 注册Car到WebChannel

这里贴一些关键代码

Car的头文件:

6cd1cd1d6156f882383e4b9e212d9e25.png

其中要说明的是:

speed和angle属性具备 读、写、change信号。

还有加速、减速、左转、右转四个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值