QT实现简单的上位机软件
最近项目要求写上位机软件,需要实现界面功能和串口读写。界面方面用过MFC(早忘记了),网上查阅资料后发现QT在5.1版本后有自带的串口模块,而且用QT实现简单界面功能很容易上手(也就期末设计随便玩过几天,约等于0基础),果断下载QT试试水。
一开始当然先看快速入门的攻略。。网上有很多攻略就不细说了。
自认为入门后开始想上位机软件的功能和架构,需要实现的功能模块不多,无非是:串口功能、数据处理、显示数据,然后根据这些模块设计界面。这里贴上后来设计好的界面雏形
由于几乎是刚接触QT,这里基本是边设计边上网查询资料。
比如添加了按钮控件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
到这里简单的上位机框架已经实现了吧。。剩下的细节和逻辑慢慢完善补充吧
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
QT实现简单的上位机软件相关推荐
- Python上位机软件图形界面实战——PyQt
转载:https://blog.csdn.net/qq_25939803/article/details/97894219 文章目录 引言 1 环境配置 2 新建一个软件窗口 3 QtDesigner ...
- 工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表、频谱仪、电子负载、功率计等通信
工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表.频谱仪.电子负载.功率计等通信 本人拥有十多年工业项目.仪器仪表产品.教学产品开发以及培训经验,精通STM32.Msp430等各 ...
- 【USB网络摄像头】基于mjpeg-streamer的视频采集与播放【QT上位机软件】
前言 最近一直在尝试制作一个,网络摄像头,先后分别尝试了使用QT包装的UDP类TCP类,和LINUX中的socket编程等方式,但是非常遗憾,都没有取得非常好的播放效果.以为只要一帧一帧的传输视频数据 ...
- Qt上位机软件串口通讯
录了一个串口讲解的视频,分别放在了抖音和B站,大家可以看看,主要讲了一下原理, B站我的主页:laorenshen的个人空间_哔哩哔哩_Bilibili 视频源码下载免费:Qt上位机软件串口通讯,视频 ...
- LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观
LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观 _:7210668077108761labview使用者
- Qt开发上位机软件建立经典蓝牙通讯
Qt开发上位机软件建立经典蓝牙通讯 之前做了一个具有经典蓝牙通讯功能的Windows上位机软件,在网上学习了相关博客以及参考了官方经典蓝牙例程之后,总结出了使用Qt建立经典蓝牙通讯的步骤,附带相关源码 ...
- 做一个最简单的上位机
记录下制作激光雷达和IMU上位机制作过程 初学者可能有很多不足和错误,欢迎指出交流! 准备工作 我安装的是QT5.8,QTcreater 4.1.0.由于在官网下载比较麻烦,所以可以再这个镜像网站上下 ...
- 嵌入式与卫星导航定位上位机软件开发(基于MFC框架)
嵌入式与卫星导航定位上位机软件开发(基于MFC框架) 1 串口通信--MSComm 控件 2 数据绘图--ChartCtrl 3 小结 专业课程要求,在SEED-DEC6713开发板上实现实时的单点定 ...
- 我的第一个上位机软件
2019年即将过去,这一年最值得开心.高兴的事就是我参与研发的"全自动生化分析仪"终于上市了,并受到市场的欢迎:由于有非常给力的销售团队,机器的订单一直不断.当然机器研制成功是项目 ...
最新文章
- JavaScript:Object.prototype.toString进行数据类型判定
- 介绍最新大片——程序员必看!
- 【UER #8】打雪仗
- 五分钟精通Oracle Hints
- 前端学习(536):多列布局3列得间距
- vs2010调试运行时弹出对话框:系统找不到指定文件
- 谷粒商城:02. 数据库初始化以及SQL语句
- P2P协议:我下小电影,99%急死你
- ANSYS18的简略安装教程
- 利用python requests库在百度图库上下载图片
- Web前端实现3D旋转魔方相册【超详细】
- smb协议讲解_smb协议心得
- 计算机国内期刊sci,国内计算机类期刊 SCI收录:
- C语言检查IP、MAC、子网掩码合法函数 实用 码住喽!
- 玩外服吃鸡手游显示服务器繁忙,玩家纷纷涌入刺激战场国际服导致服务器繁忙,出现BUG锁服!...
- php测试教程,PHP单元测试基础教程
- 数据字典在web中的简单应用
- 我的世界(二)之奇点
- 丑数 uva-136 丑数
- 如何在vue项目中使用Highmaps(vue+Highmaps)
热门文章
- Linux系统如何下载CityScape/KITTI-STEP数据集
- Aapache 启动不了,报错信息:suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
- 如何解决Kettle读取txt文件时出现的中文乱码问题?
- 畅想小组KTV点歌系统简介
- 多个并列的if条件句和if-elif的区别
- julius开源语音识别引擎
- 蓝牙BQB认证所需资料和流程
- 不得不珍藏的Chrome插件推荐
- 英特尔服务器新消息,又一个时代的眼泪!英特尔安腾处理器走完20年成为历史...
- [字符串题-java]1189. “气球” 的最大数量