Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >QT实现简单的上位机软件

QT实现简单的上位机软件

作者头像
全栈程序员站长
发布于 2022-08-25 07:29:51
发布于 2022-08-25 07:29:51
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

最近项目要求写上位机软件,需要实现界面功能和串口读写。界面方面用过MFC(早忘记了),网上查阅资料后发现QT在5.1版本后有自带的串口模块,而且用QT实现简单界面功能很容易上手(也就期末设计随便玩过几天,约等于0基础),果断下载QT试试水。

一开始当然先看快速入门的攻略。。网上有很多攻略就不细说了。

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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函数获取当前选择的值,便于打开对应的串口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,将其连接到扫描串口的函数,就可以定时扫描串口了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(ScanSerialPort()));
    timer->start(5000);

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
connect(serial, SIGNAL(readyRead()), this, SLOT(ReadSerial()));

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

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

到这里简单的上位机框架已经实现了吧。。剩下的细节和逻辑慢慢完善补充吧

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142765.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于STM32的心率计(3):Qt上位机设计
前两篇文章介绍了AD采集传感器数据和数据的滤波处理获取心率值。这篇文章主要是介绍Qt上位机如何实现波形的显示,串口数据的解析,以及一些小细节实现。这篇文章写完,uFUN心率计这个小项目就算结束了。
单片机点灯小能手
2024/07/02
5250
基于STM32的心率计(3):Qt上位机设计
干货|手把手教你写一个串口调试助手「建议收藏」
摘要:前段时间发布了一个用QT写的串口调试助手,很多小伙伴在后台留言要源码。其实网上有很多免费开源的用QT的上位机,大家搜一下就能找到,为了大家方便学习QT以及如何写一个上位机,今天推荐一下学习资源,顺带带大家写一个非常简单的串口调试助手。
全栈程序员站长
2022/08/24
2.6K0
干货|手把手教你写一个串口调试助手「建议收藏」
【C++】Qt:串口调试助手示例
串口助手是一种串口通讯测试工具,它可以用于打开、关闭、配置串口,读写串口数据等常见的串口通信操作。 在嵌入式系统调试、模块测试、通讯协议分析等领域都具有广泛的应用。
DevFrank
2024/07/24
7690
【C++】Qt:串口调试助手示例
QT应用编程: 开发串口调试助手
串口调试助手,在嵌入式开发中是很常用的。比如: 通过串口打印测试数据、调试串口WIFI(ESP8266、有人WIFI..)、调试GSM模块、GPS模块、字库更新等等。
DS小龙哥
2022/01/07
4.2K0
QT应用编程: 开发串口调试助手
基于uFUN开发板的心率计(三)Qt上位机的实现
上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值。这篇文章主要是介绍Qt上位机如何实现波形的显示,串口数据的解析,以及一些小细节实现。这篇文章写完,uFUN心率计这个小项目就算结束了,最近又做了个uFUN开发板的扩展板,在微信群里的朋友都已经看到了,后面会做一些好玩的东西,大家要保持关注哈!
单片机点灯小能手
2020/07/16
1.7K0
基于小熊派光强传感器BH1750状态机驱动项目再度升级(带上位机曲线显示)
在工作中,我们常常需要对一些传感器的某些数值进行长时间的测试和观察,以了解传感器的性能,在电子工程里,我们经常听到的测试曲线莫过于电池充放电曲线了,通过电池充放电曲线,我们很容易可以知道电池在实际使用过程中满电和馈电的状态以及电池的使用周期等等,今晚,我们就让光强通过曲线显示出来,用QT+QCustomPlot来实现,最终效果如下视频操作所示:
杨源鑫
2020/05/21
7770
46.QT-自带库QSerialPort串口使用
之前一章学习的是第三方库使用: 34.QT-qextserialport第三方库制作串口助手(并动态检测在线串口,附带源码)
诺谦
2019/06/14
7K0
46.QT-自带库QSerialPort串口使用
Qt 串口上位机开发《Rice 上位机 学习开发》
前几天分享了一个使用C#开发的串口上位机,那么今天教你如何100行QT代码实现一个串口上位机。如果你学习过C++,那么使用QT开发软件,就不是什么大问题了,QT很多时候使用在linux上。所以使用QT开发还是挺不过的选择,QT兼容Linux和Windows,跨平台语言。话不多说,接下来说说他是怎么实现的。首先直接上软件效果图(温馨提示:代码没写完,哪有脸睡觉)。
Rice加饭
2022/05/09
2K0
Qt 串口上位机开发《Rice 上位机 学习开发》
Qt | 串口调试工具实现
【转存慢慢看】 通过网盘分享的文件:terminal 链接: https://pan.baidu.com/s/1TZX33uo-Rv9fQ7A6TnR84g?pwd=pbiw 提取码: pbiw 看看标准的代码规范
Qt历险记
2024/11/13
3450
Qt | 串口调试工具实现
Qt编写控件属性设计器7-串口采集
数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示。
feiyangqingyun
2019/09/14
2.2K0
Qt编写控件属性设计器7-串口采集
QT应用编程: 开发TCP网络调试助手
TCP网络调试助手,在网络相关开发、嵌入式开发里使用较多,主要用来测试网络传输,调试等等。
DS小龙哥
2022/01/07
1.9K0
QT应用编程:  开发TCP网络调试助手
Qt开源作品3-串口调试助手
这个作品很多年前就做了,经过了长达七八年的完善,当然也不是全身心的投入完善,也就是根据实际项目的需求不断完善的,尤其是模拟设备回复数据的功能,这个在很多用Qt做上位机开发非常实用,毕竟很多软硬件的项目都是同时开工的,不会说是等硬件或者软件都完工了才去搞另外一部分,所以软件工程师就需要根据一开始约定好的通信协议来先把软件搞起来,没有硬件实地测试怎么办呢,只能自己写工具来模拟设备回复数据咯,基本上都是要求收到什么数据回复什么数据,所以这就有了通用的串口设备回复数据的可能。
feiyangqingyun
2020/04/27
3K0
Qt开源作品3-串口调试助手
QT上位机串口控制MCU
秋名山码神
2023/11/18
5620
QT上位机串口控制MCU
Qt 实现视频监控系统
二、功能特点 (一)软件模块 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。 视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。 电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。 日志查询模块,包括本地日志、设备日志等。 系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。 (二)基础功能 支持各种视频流(rtsp、
派大星在吗
2021/12/15
3K0
QT应用编程: 编写网络调试助手(Android系统APP)
完整工程源码下载地址(包含APK文件): https://download.csdn.net/download/xiaolong1126626497/19051988
DS小龙哥
2022/01/07
1.6K0
QT应用编程: 编写网络调试助手(Android系统APP)
QT应用编程: 编写HC05串口蓝牙调试助手(Android系统APP)
完整工程源码下载地址(包含APK文件): https://download.csdn.net/download/xiaolong1126626497/19051787
DS小龙哥
2022/01/07
2.6K0
QT应用编程: 编写HC05串口蓝牙调试助手(Android系统APP)
Qt / Model_View_Delegate
早期Qt:传统的窗口部件,其本身内部包含,用于存储数据的内置容器。(直观,但是同步数据较低效)
Kano365
2022/04/12
1.8K0
Qt 学习之路 2(42):QListWidget、QTreeWidget 和 QTableWidget
http://www.devbean.net/2013/02/qt-study-road-2-qlistwidget-qtreewidget-qtablewidget/
bear_fish
2018/09/20
3.3K0
Qt 学习之路 2(42):QListWidget、QTreeWidget 和 QTableWidget
基于ZigBee设计的天气监测系统
伴随我国经济的高速发展,大气环境污染问题也随之诞生,针对日益严重的大气污染问题,各种监测手段应运而生。经过对现有监测手段进行详细研究后,本文提出一种基于ZigBee技术的空气质量监测系统。本系统利用ZigBee技术进行组网,使用协调器通过串口向数据管理上位机传递数据,提供监测方法。
DS小龙哥
2022/07/12
7100
基于ZigBee设计的天气监测系统
GPS模块运用: 定位测试软件设计(上位机)
ATGM336H-5N 系列模块是 9.7X10.1 尺寸的高性能 BDS/GNSS 全星座定位导航模块系列的总称。该系列模块产品都是基于中科微第四代低功耗 GNSS SOC 单芯片—AT6558,支持多种卫星导航系统,包括中国的 BDS(北斗卫星导航系统),美国的 GPS,俄罗斯的 GLONASS,欧盟的 GALILEO,日本的 QZSS以及卫星增强系统 SBAS(WAAS,EGNOS,GAGAN,MSAS)。AT6558 是一款真正意义的六合一多模卫星导航定位芯片,包含 32 个跟踪通道,可以同时接收六个卫星导航系统的 GNSS 信号,并且实现联合定位、导航与授时。
DS小龙哥
2022/01/17
2.5K0
GPS模块运用: 定位测试软件设计(上位机)
推荐阅读
相关推荐
基于STM32的心率计(3):Qt上位机设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验