一、 开发环境和工具
1、 WIN10系统
2、 QT5.4.0(C++)

二、 创建QT项目
① 选择“Qt Widgets Application”

② 选择项目存放路径及名称

③ 设置基本类和名称,这里基类选择“QMainWindow”


④ 创建的软件项目框架如下图所示

三、 搭建UI界面
通过左侧工具栏,拖曳按钮、文本框,搭建并重命名如下图所示界面

四、 程序实现
① 项目中导入串口库

QT       += serialport

② 在 MainWindow.cpp 文件加入串口头文件

#include <QSerialPort>
#include <QSerialPortInfo>

③ 初始化波特率

QString RaudRate[13]={"110","300","600","1200","2400","4800","9600","14400","19200","38400","56000","57600","115200"};
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);for(int i=0;i<13;i++){ui->CB_BaudRate->addItem(RaudRate[i]);}
}

④ 点击刷新按钮,刷新可用串口信息

void MainWindow::on_Button_RefleshCom_clicked()
{QString tempstr;ui->CB_SerialCom->clear();//运行开始查找可用串口foreach(constQSerialPortInfo&info,QSerialPortInfo::availablePorts()){//串口号下拉菜单,增加一个条目ui->CB_SerialCom->addItem(info.portName());}
}

⑤ 初始化并打开串口

void MainWindow::on_Button_OpenCom_clicked()
{if(this->ui->Button_OpenCom->text()=="打开串口")//初始状态,配置串口参数{serial.setPortName(ui->CB_SerialCom->currentText());//设置串口号、serial.setBaudRate(ui->CB_BaudRate->currentText().toInt());//设置波特率serial.setDataBits(QSerialPort::Data8);//设置串口数据位8serial.setParity(QSerialPort::NoParity);//无校验位serial.setStopBits(QSerialPort::OneStop);//1位停止位serial.setFlowControl(QSerialPort::NoFlowControl);if(!serial.open(QIODevice::ReadWrite)){QMessageBox::critical(NULL,"提示","串口打开失败");return;}ui->Button_Send->setEnabled(true);//串口打开成功,使能发送按钮ui->Button_OpenCom->setText("关闭串口");//创建定时器,定时接收串口数据timerSerial = new QTimer(this);connect(timerSerial,SIGNAL(timeout()),this,SLOT(TimerUpdate()));timerSerial->start(30); //若超过30毫秒没有数据更新,则认为一帧接收完成}else{serial.close();ui->Button_Send->setEnabled(0);//串口关闭,使能发送按钮timerSerial->stop();this->ui->Button_OpenCom->setText("打开串口");}
}

⑥ 发送串口数据

void MainWindow::on_Button_Send_clicked()
{QString SendString;QString SendStringHEX;int len=0;timeCurrent = QDateTime::currentDateTime();//获取系统时间time = timeCurrent.toString("[yy-MM-dd hh:mm:ss.zzz]");SendString=ui->textEdit_Send->toPlainText();//获取发送文本框字符//检查是否添加回车换行if(ui->checkBox__SendAddEnter->isChecked()){SendString+="\r\n";}//检查是否HEX格式发送if(ui->checkBox__SendHEX->isChecked())//发送格式为HEX{//HEX格式转化为ASCII字符串if(!HextoString(SendString,&SendStringHEX)){QMessageBox::critical(NULL,"提示","非法字符");return;}serial.write(SendStringHEX.toLatin1());//发送数据至串口//检查显示格式if(ui->checkBox_ReciveHEX->isChecked())//显示格式为HEX{len = SendString.length();for(int i=0;i<len/2;i++){SendString.insert((i+1)*2+i," ");}ui->textEdit_Recive->append( time+"发->"+SendString);}else{ui->textEdit_Recive->append( time+"发->"+SendStringHEX);}}else//发送格式为字符串{serial.write(SendString.toLatin1());//发送数据if(ui->checkBox_ReciveHEX->isChecked())//显示格式为HEX{SendString=QString::fromLocal8Bit(SendString.toLatin1().toHex().toUpper());len = SendString.length();for(int i=0;i<len/2;i++){SendString.insert((i+1)*2+i," ");}}ui->textEdit_Recive->append( time+"发->"+SendString);}
}

⑦ 串口数据接收

void MainWindow::TimerUpdate()
{QByteArray rx_buf = serial.readAll();//读取串口接收的数据;int len;static QByteArray sumData;QString DataString;if (!rx_buf.isEmpty())//串口接收字符不为空{sumData.append(rx_buf);//将收到字符拼接}else if(!sumData.isEmpty())//累计字符不为空{timeCurrent = QDateTime::currentDateTime();//获取系统时间time = timeCurrent.toString("[yy-MM-dd hh:mm:ss.zzz]");rx_buf.clear();DataString=QString::fromLocal8Bit(sumData);//检查是否HEX格式显示if(ui->checkBox_ReciveHEX->isChecked())//HEX格式显示{DataString=QString::fromLocal8Bit(sumData.toHex().toUpper());len = DataString.length();for(int i=0;i<len/2;i++){DataString.insert((i+1)*2+i," ");}}ui->textEdit_Recive->append(time+"收<-"+DataString);sumData.clear();}
}

基于QT的串口调试助手设计相关推荐

  1. 基于QT的串口调试助手制作

    目录 1.创建文件 2.串口界面制作 3.代码 4.结果 5.改进 6.百度链接 1.创建文件 创建带有ui界面的qt程序,可以点击文件-新建文件或项目就会出现上面的界面,选这Application( ...

  2. linux qt地图开发教程,基于QT的电子地图的设计与实现

    [实例简介] 基于QT的电子地图的设计与实现 ,毕业设计论文,附上源码以及论文原文,Linux下系统可跑.. [实例截图] [核心代码] system ├── 正文.doc └── 系统 ├── de ...

  3. QT实现串口调试助手(七):字体设置面板创建及窗体间传值

    上一篇: QT实现串口调试助手(六):页面布局 QT串口工具相关文章链接 一般串口调试工具都有修改串口接收框字体的功能面板,我们也来加一个: 1.先创建一个字体设置面板 比如我们创建一个widget, ...

  4. qt实现汽车仪表盘设计linux,基于Qt汽车车速仪表盘设计.doc

    基于Qt汽车车速仪表盘设计 研 究 生 课 程 论 文 学 院: 信息工程学院 专 业: 课 程: 姓 名: 学 号: 授课教师: 一 研究背景 仪表作为汽车整个系统中十分重要的部分,是提高汽车综合性 ...

  5. qt做串口调试助手——通信收发篇

    qt实现串口调试助手 串口初始化 串口调试助手的初始化,一般包括波特率.端口号.奇偶校验.数据位和停止位.如果最终需要将串口商业化,一般这些参数都会交给用户自定义,但我们写了自己用,且上位机和下位机同 ...

  6. 扫雷程序设计Android答辩,基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt

    基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt 程序设计 基于QT语言的扫雷游戏,答辩学生,一.分析扫雷游戏的基本功能,1.从外观上分析 方块 笑脸 计时器 有雷标识 无雷标识 胜利画面 失败画面, ...

  7. 基于qt4的串口调试助手开发

    程序全部代码:https://download.csdn.net/download/haojun1996/10501590 1. 课程设计内容 本课程设计的内容是设计一个基于QT的串口调试软件,同时支 ...

  8. qt中socket通信流程图_基于Qt的局域网通信设计说明书.doc

    文档控制记录 序号版本日期修改内容修改人审批人1V1.02017-04-24创建2 目录目录4 辅助功能设计14 1目的 本文主要介绍利用Qt实现局域网通信的主要实现流程和一些技术知识点的设计说明. ...

  9. 基于Qt的软件框架设计

    1.引子 Qt,在很多人的认识里是一个做界面的框架,只用来做界面,而后端往往是用别的来实现.在本人的实践中, 我把界面与后端的实现都用Qt来实现了. 2.软件分层 一般来说,我们的软件架构会很成很多层 ...

最新文章

  1. Python 语法问题-module ‘pip._internal‘ has no attribute ‘pep425tags‘. 原因及解决办法,32位、64位查看pip支持万能方法
  2. Visual studio代码行数统计
  3. 巧妙地在Windows搭建node服务器
  4. poj 1094 Sorting It All Out(拓扑排序)
  5. Oracle数据库日常管理之数据备份,恢复及迁移 (第五讲 )
  6. php携程语比,PHP 协程
  7. java pfx提取私钥加签,详解pfx证书提取公私钥的方法
  8. Web环境下使用Starling出现的问题收集整理
  9. ai驱动数据安全治理_利用AI驱动的自动协调器实时停止有毒信息
  10. 佐罗一键新机数据导出导入文件夹
  11. java查看eth转账状态,eth转账确认查询
  12. 开发一个商城需要多少钱 做一个电商网站大概多少钱
  13. cb.conjunction()的意思
  14. php编写六十甲子纳音表_六十甲子纳音表
  15. 计算机屏幕出现条纹w7,电脑屏幕出现条纹,教您电脑屏幕出现条纹闪烁怎么解决...
  16. IDEA取消重复代码提示功能
  17. 【设计模式学习笔记1】原型法
  18. 切切切词!新词发现算法TopWORDS的原理及实现|实在智能AI+RPA学院
  19. Python爬取张家界风景美图
  20. xcode 程序入口

热门文章

  1. 项目管理到底管的是什么?
  2. JAVA实现PGP/GPG加解密
  3. java jframe类_Java-GUI笔记——JFrame类
  4. c语言在线考试系统用qt,基于QT的在线考试管理系统设计与实现
  5. 《向往的生活》乔杉在男生宿舍躺着抽电子烟
  6. 让师生“不跑腿”,教育数据治理究竟有何魔力
  7. 基于waterdrop,从hive抽取数据至Oracle
  8. 二手车商城交易网站平台(Java+SSM+MySQL)
  9. 学计算机的适不适合买苹果电脑,笔记本电脑的选择真的很重要!别再瞎买了
  10. 立创EDA新建模块库流程