首页 » 99链接平台 » QT实现简单的上位机软件(串口上位函数数据老舅)

QT实现简单的上位机软件(串口上位函数数据老舅)

南宫静远 2024-11-04 10:35:19 0

扫一扫用手机浏览

文章目录 [+]

一开始当然先看快速入门的攻略。

网上有很多攻略就不细说了。

自认为入门后开始想上位机软件的功能和架构,需要实现的功能模块不多,无非是:串口功能、数据处理、显示数据,然后根据这些模块设计界面。
这里贴上后来设计好的界面雏形

由于几乎是刚接触QT,这里基本是边设计边上网查询资料。

QT实现简单的上位机软件(串口上位函数数据老舅) 99链接平台
(图片来自网络侵删)

比如添加了按钮控件QPushButton,QT里是怎么实现按下Button后执行相关功能的?于是了解到QT中有信号(Signal)和槽(Slot)的机制。
对这个机制简单的理解是,当一个Signal出现,比如按钮的按下信号click(),就会自动跳到其连接的Slot(),Slot()就是一个自己实现的函数。
这跟STM32等单片机的中断有点类似,所以个人感觉比较好理解。

所以在上位机中,“打开串口”按钮对应的Slot()就是串口类函数 QSerialPort::open() ,再进一步设置串口的波特率等参数就行了。

void MainWindow::on_SetSerialBtn_clicked(){ //获取当前值 QString StrSerial = ui->SerialBox->currentText(); //根据按钮的值判断后续操作 if( ui->SetSerialBtn->text() == "打开串口" ) { if(timer->isActive()) timer->stop(); OpenSerial(StrSerial); } else if ( ui->SetSerialBtn->text() == "关闭串口") { CloseSerial(); if(!timer->isActive()) timer->start(5000); }}

要打开串口,当然也要知道目前有什么串口在使用着。
这里可以使用 QSerialPortInfo::availablePorts() 获得有效串口,再将有效串口以QString形式显示到上面的QComboBox空间中。

于是到这里。

又开始查询QComboBox的相关用法,这里可以直接按F1进入QT自带的Help Mode,将所有的函数都列出来了,非常使用。
这里使用到 QComboBoxdeaddItem 函数进行添加,和 currentText函数获取当前选择的值,便于打开对应的串口。

QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts(); ui->SerialBox->clear(); if(infos.isEmpty()) { ui->SerialBox->addItem("无"); } else { foreach (QSerialPortInfo info, infos) { ui->SerialBox->addItem(info.portName()); } }

这里又有问题了,因为电脑的有效串口值是会更新了,在插入新串口后应该能更新QComboBox数据。
于是使用了QT自带的定时器QTimer,时间到它会发出timeout()的signal,将其连接到扫描串口的函数,就可以定时扫描串口了。

timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(ScanSerialPort())); timer->start(5000);

打开串口后就要读取数据了,这里使用到QSerialPort的readAll()函数,一次读完所有的值(项目的单片机是定时发送数据的)。
但如果一直让程序执行读取就会阻塞,这里发现QSerialPort有个很好的设计,串口有数据时会发送readyRead()的Signal,连接到读取的相关函数即可。
个人理解Signal和Slot机制可以有效防止程序阻塞,相当不错。

connect(serial, SIGNAL(readyRead()), this, SLOT(ReadSerial()));

对数据的处理就不细说,根据自己定义的协议处理即可。
处理后显示相关数据到QTableWidget空间中,这里需要用到QTableWidget的setItem(int row, int column, QTableWidgetItem item)函数,这里要先准备好 QTableWidgetItem 类型,而且使用过程中发现一个Item只能set一次,否则会提示以下错误

解决方法:每次setItem前都重新构造一个Item

到这里简单的上位机框架已经实现了吧。

剩下的细节和逻辑慢慢完善补充吧

标签:

相关文章

IT行业私活,介绍灰色地带下的机遇与挑战

在IT行业,私活是一个敏感而又普遍存在的现象。私活,顾名思义,是指个人在业余时间从事与本职工作相关的业务活动,以获取额外收入。在我...

99链接平台 2024-12-30 阅读0 评论0

IT连接失败,提示现代通信的脆弱性与挑战

在信息技术飞速发展的今天,互联网已成为人们生活中不可或缺的一部分。在享受便捷通信的IT连接失败的问题也日益凸显。本文将探讨IT连接...

99链接平台 2024-12-30 阅读0 评论0

IT软件通信,构建数字化时代的桥梁

随着信息技术的飞速发展,IT软件通信已成为推动社会进步的重要力量。在这个数字化时代,IT软件通信不仅改变了人们的沟通方式,也深刻影...

99链接平台 2024-12-30 阅读0 评论0

Smitan,科技与人类情感的交融

在科技高速发展的今天,人工智能已经深入到我们的生活中,成为了我们不可或缺的一部分。其中,Smitan作为一款人工智能助手,以其独特...

99链接平台 2024-12-30 阅读0 评论0

探寻空洞骑士世界,一场奇妙的冒险之旅

在遥远的国度,有一个名为空洞骑士的世界。这里神秘莫测,充满了未知与奇幻。今日,就让我们一起踏入这个神秘的世界,领略其独特的魅力。一...

99链接平台 2024-12-30 阅读0 评论0