最近项目要求写上位机软件,需要实现界面功能和串口读写。界面方面用过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实现简单的上位机软件相关推荐

  1. Python上位机软件图形界面实战——PyQt

    转载:https://blog.csdn.net/qq_25939803/article/details/97894219 文章目录 引言 1 环境配置 2 新建一个软件窗口 3 QtDesigner ...

  2. 工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表、频谱仪、电子负载、功率计等通信

    工业监测自动化上位机软件开发,支持PLC通信,以及与各类品牌 的电流表.频谱仪.电子负载.功率计等通信 本人拥有十多年工业项目.仪器仪表产品.教学产品开发以及培训经验,精通STM32.Msp430等各 ...

  3. 【USB网络摄像头】基于mjpeg-streamer的视频采集与播放【QT上位机软件】

    前言 最近一直在尝试制作一个,网络摄像头,先后分别尝试了使用QT包装的UDP类TCP类,和LINUX中的socket编程等方式,但是非常遗憾,都没有取得非常好的播放效果.以为只要一帧一帧的传输视频数据 ...

  4. Qt上位机软件串口通讯

    录了一个串口讲解的视频,分别放在了抖音和B站,大家可以看看,主要讲了一下原理, B站我的主页:laorenshen的个人空间_哔哩哔哩_Bilibili 视频源码下载免费:Qt上位机软件串口通讯,视频 ...

  5. LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观

    LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观 _:7210668077108761labview使用者

  6. Qt开发上位机软件建立经典蓝牙通讯

    Qt开发上位机软件建立经典蓝牙通讯 之前做了一个具有经典蓝牙通讯功能的Windows上位机软件,在网上学习了相关博客以及参考了官方经典蓝牙例程之后,总结出了使用Qt建立经典蓝牙通讯的步骤,附带相关源码 ...

  7. 做一个最简单的上位机

    记录下制作激光雷达和IMU上位机制作过程 初学者可能有很多不足和错误,欢迎指出交流! 准备工作 我安装的是QT5.8,QTcreater 4.1.0.由于在官网下载比较麻烦,所以可以再这个镜像网站上下 ...

  8. 嵌入式与卫星导航定位上位机软件开发(基于MFC框架)

    嵌入式与卫星导航定位上位机软件开发(基于MFC框架) 1 串口通信--MSComm 控件 2 数据绘图--ChartCtrl 3 小结 专业课程要求,在SEED-DEC6713开发板上实现实时的单点定 ...

  9. 我的第一个上位机软件

    2019年即将过去,这一年最值得开心.高兴的事就是我参与研发的"全自动生化分析仪"终于上市了,并受到市场的欢迎:由于有非常给力的销售团队,机器的订单一直不断.当然机器研制成功是项目 ...

最新文章

  1. JavaScript:Object.prototype.toString进行数据类型判定
  2. 介绍最新大片——程序员必看!
  3. 【UER #8】打雪仗
  4. 五分钟精通Oracle Hints
  5. 前端学习(536):多列布局3列得间距
  6. vs2010调试运行时弹出对话框:系统找不到指定文件
  7. 谷粒商城:02. 数据库初始化以及SQL语句
  8. P2P协议:我下小电影,99%急死你
  9. ANSYS18的简略安装教程
  10. 利用python requests库在百度图库上下载图片
  11. Web前端实现3D旋转魔方相册【超详细】
  12. smb协议讲解_smb协议心得
  13. 计算机国内期刊sci,国内计算机类期刊 SCI收录:
  14. C语言检查IP、MAC、子网掩码合法函数 实用 码住喽!
  15. 玩外服吃鸡手游显示服务器繁忙,玩家纷纷涌入刺激战场国际服导致服务器繁忙,出现BUG锁服!...
  16. php测试教程,PHP单元测试基础教程
  17. 数据字典在web中的简单应用
  18. 我的世界(二)之奇点
  19. 丑数 uva-136 丑数
  20. 如何在vue项目中使用Highmaps(vue+Highmaps)

热门文章

  1. Linux系统如何下载CityScape/KITTI-STEP数据集
  2. Aapache 启动不了,报错信息:suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
  3. 如何解决Kettle读取txt文件时出现的中文乱码问题?
  4. 畅想小组KTV点歌系统简介
  5. 多个并列的if条件句和if-elif的区别
  6. julius开源语音识别引擎
  7. 蓝牙BQB认证所需资料和流程
  8. 不得不珍藏的Chrome插件推荐
  9. 英特尔服务器新消息,又一个时代的眼泪!英特尔安腾处理器走完20年成为历史...
  10. [字符串题-java]1189. “气球” 的最大数量