QML 网络+串口 调试工具

最近在学习QML的相关知识点,然后利用所学知识,开发了一款调试工具,可以进行TCP和UDP和串口三方面的调试;

此篇博客主要介绍工具的使用和代码架构,源码已开源,链接在文末。


1.工具截图

TCP客户端
在这里插入图片描述
TCP服务器
在这里插入图片描述
UDP客户端
在这里插入图片描述
串口调试
在这里插入图片描述
侧边栏菜单
在这里插入图片描述
弹窗
在这里插入图片描述
接收保存到文件:
在这里插入图片描述

功能其实都是参考NetAssist的;然后ui是参考网上的一篇博客的,现在找不到那边博客了,链接就没放出来。

其中,TCP客户端和TCP服务端可以自己和自己进行链接通讯测试,UDP可以多开工具或者使用NetAssist工具进行测试;

串口测试,我使用的是虚拟串口软件Virtual Serial Port Driver,启动两个调试工具软件,打开两个虚拟出来的串口号,即可进行相互传输数据;

在这里插入图片描述
在这里插入图片描述


2.系统架构

工具前端ui采用QML语言编写,后端数据处理则使用QT语言,这种前后端分离适应当前环境的技术架构。

大概结构如下:(左边是QT,右边是QML)
在这里插入图片描述
QT端,每一种调试都会有一组类在处理,相应对应这QML端的qml文件;

最重要的是 engine.addImportPath("qrc:/Resource/qml"); 将所有qml文件加载起来;

QT 和 QML 是如何通讯的?
void QmlManager::init() 函数中,使用了qmlRegisterSingletonType函数将SocketControllerC++类对象注册为 QML 中的全局唯一单例对象‌,使多个 QML 组件可共享同一实例;

qmlRegisterSingletonType<SocketController>("Nettools", 1, 0, "SocketController", SingletonSocketController);

在SocketController类中,声明了四个类对象,该四个类对象即可被qml调用;

Q_PROPERTY(TcpClient *tcpClient READ tcpClient NOTIFY signalTcpClient)
Q_PROPERTY(TcpServer *tcpServer READ tcpServer NOTIFY signalTcpServer)
Q_PROPERTY(UdpClient *udpClient READ udpClient NOTIFY signalUdpClient)
Q_PROPERTY(SerialPort *serialPort READ serialPort NOTIFY signalSerialPort)

紧接着在qml中,只要导入了该模块都可以使用这个对象与QT进行通讯了。

import Nettools 1.0

property var  globalSocket: SocketController
property var  serialPort: globalSocket.serialPort
property var  tcpClinet: globalSocket.tcpClient
property var  tcpServer: globalSocket.tcpServer
property var  udpClient: globalSocket.udpClient

在TcpClient、TcpServer、UdpClient、SerialPort中,都继承自SocketNetworkBase,内部提供了通用的与QML通讯的声明:

Q_PROPERTY(bool _isActivate READ isActivate WRITE setIsActivate NOTIFY signalIsActivateChanged)
Q_PROPERTY(QString _serverIp READ serverIp WRITE setServerIp NOTIFY signalServerIpChanged)
Q_PROPERTY(int _port READ port WRITE setPort NOTIFY signalPortChanged)
Q_PROPERTY(QString _sendData READ sendData WRITE setSendData NOTIFY signalSendDataChanged)
Q_PROPERTY(QString _revData READ revData WRITE setRevData NOTIFY signalRevDataChanged)
Q_PROPERTY(int _sendFormat READ sendFormat WRITE setSendFormat NOTIFY signalSendFormatChanged)
Q_PROPERTY(int _recvFormat READ recvFormat WRITE setRecvFormat NOTIFY signalRecvFormatChanged)
Q_PROPERTY(bool _isSendFileState READ getIsSendFileState WRITE setIsSendFileState NOTIFY signalIsSendFileStateChanged)
Q_PROPERTY(int _sendFileProgress READ getSendFileProgress WRITE setSendFileProgress NOTIFY signalSendFileProgressChanged)

main函数中,只调用了QmlManager *qmlManager = QmlManager::Instance();一行代码,即可将qml加载;
QmlManager内部已经加载初始化。

QML中使用了StackView组件用于页面切换。


3.源码

https://gitee.com/ygt777/qml—network-debugging-tool.git

已经开源到gitee,有兴趣可以Fork参考学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值