今天用Qt写了一个串口收发工具,记录下整个流程。

1、项目工程布局

2、ui文件布局

3、widget.h文件

#ifndef WIDGET_H

#define WIDGET_H

#include

#include

#include

#include

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

private:

Ui::Widget *ui;

QSerialPort *pSerialPort;

QByteArray recvData;

};

#endif // WIDGET_H

4、widget.cpp文件

#include "widget.h"

#include "ui_widget.h"

#include

#include

#include

#include

#include

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

ui->widget->setWindowTitle("串口助手");

pSerialPort = NULL;

//枚举识别到的com口

//写法一:

/* foreach(QSerialPortInfo info,QSerialPortInfo::availablePorts())//读串口

{

QSerialPort port;

port.setPort(info);

if(port.open(QIODevice::ReadWrite))//如果串口可以读写的形式打开

{

ui->comboBox_portName->addItem(info.portName()); //显示出来

port.close();//自动关闭等待人为打开

}

}*/

//写法二

QList seriList = QSerialPortInfo::availablePorts();

for(int i = 0;i

{

QSerialPort port;

port.setPort(seriList.at(i));

if(port.open(QIODevice::ReadWrite))

{

ui->comboBox_portName->addItem(seriList.at(i).portName());

port.close();

}

}

//信号槽连接打开按钮和相关处理操作

connect(ui->openBtn,&QPushButton::clicked,[=](){

if(pSerialPort != NULL)

{

QMessageBox::warning(this,"警告","已有活跃串口,请先关闭再打开");

return;

}

pSerialPort = new QSerialPort(this);

pSerialPort->setPortName(ui->comboBox_portName->currentText());

pSerialPort->open(QIODevice::ReadWrite);

pSerialPort->setBaudRate(ui->comboBox_bandRate->currentText().toInt());

pSerialPort->setDataBits(QSerialPort::Data8);

pSerialPort->setParity(QSerialPort::NoParity);

pSerialPort->setFlowControl(QSerialPort::NoFlowControl);

pSerialPort->setStopBits(QSerialPort::OneStop);

connect(pSerialPort,&QSerialPort::readyRead,this,[=](){

recvData = pSerialPort->readAll();

if(!recvData.isEmpty())

{

ui->textEdit_read->append(recvData);

}

recvData.clear();

});

});

//发送数据信号槽连接

connect(ui->sendBtn,&QPushButton::clicked,this,[=](){

if(NULL == pSerialPort )

return;

pSerialPort->write(ui->lineEdit_write->text().toUtf8());

ui->lineEdit_write->clear();

});

//清空按钮信号槽连接

connect(ui->clearBtn,&QPushButton::clicked,this,[=](){

ui->textEdit_read->clear();

});

//关闭串口按钮信号槽连接

connect(ui->closeBtn,&QPushButton::clicked,this,[=](){

pSerialPort->close();

delete pSerialPort;

pSerialPort = NULL;

});

//保存按钮信号槽连接

connect(ui->saveBtn,&QPushButton::clicked,this,[=](){

if(ui->textEdit_read->document()->isEmpty())

{

QMessageBox::warning(this,"警告","记录不能为空");

return;

}

QString path = QFileDialog::getSaveFileName(this,"保存log记录","log记录","(*.txt)");

qDebug()<

if (path.isEmpty())

{

QMessageBox::warning(this,"路径","路径不能为空");

return ;

}

QFile file(path);

file.open(QIODevice::WriteOnly|QIODevice::Text);

QTextStream stream(&file);

stream<textEdit_read->toPlainText();

file.close();

});

ui->lineEdit_write->setFocus();

}

Widget::~Widget()

{

delete ui;

}

5、main.cpp 文件

#include "widget.h"

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Widget w;

w.show();

return a.exec();

}

6、Serial.pro中要加入 serialport 模块

7.运行效果(电脑上外接串口,然后串口Tx和Rx短接,用作自发自收)

qt 串口粘包_用Qt 5写一个串口收发桌面工具相关推荐

  1. QT tcp粘包问题

    QT tcp粘包问题 2016年12月27日 23:50:06 月下独奏 阅读数 1282更多 分类专栏: QT 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文 ...

  2. 手把手教你写一个串口调试助手

    硬件攻城狮 2022-05-20 14:05 发表于广东 果果小师弟. 电子信息工程硕士在读,分享单片机.嵌入式linux.物联网等知识,致力于打造最硬核的嵌入式技术公众号. 摘要:前段时间发布了一个 ...

  3. 从零开始,教你写一个串口调试助手

    摘要:相信很多小伙伴都没接触过QT,如果想用QT写一个调试助手,首先是要会一点C++语法.只要能看得懂C++的代码,就能很快的写一个串口调试助手. 下面先推荐两个视频教程,感兴趣的可以看一看! 1.B ...

  4. python监听多个udp端口_用Python写一个UDP端口测试工具(一)

    需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...

  5. qt 串口粘包_Qt Socket 传输图片——图像拆包、组包、粘包处理

    之前给大家分享了一个使用python发图片数据.Qt server接收图片的Demo.之前的Demo用于传输小字节的图片是可以的,但如果是传输大的图片,使用socket无法一次完成发送该怎么办呢?本次 ...

  6. qt 串口粘包_qt tcp粘包处理办法

    小编在使用qt进行tcp传输时候,接收端遇到接收粘包问题.现在将解决思路描述如下. 1.发送数据格式 一帧数据以!开头以?结尾,帧数据间以+区分 例如:!12#21#32#23#50?+ 2.接收端处 ...

  7. QT TCP粘包问题解决方案

    tcp中当两包数据发送间隔很短的时候,接收的时候就会出现两个包粘在一起的情况,也就是粘包. a.简单的解决方法:控制发送间隔,使用定时器延时(图形界面不要用sleep除非开线程)让不能黏在一起的包分开 ...

  8. qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...

  9. qt web混合编程_基于Qt与MATLAB的混合编程技术

    摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...

最新文章

  1. 美国再出半导体新法案!1800亿谋求芯片制造振兴
  2. 【Node】node.js实现服务器的反向代理,解决跨域问题
  3. RocketMQ-控制台的安装与启动
  4. java数字分割的下划线_Java-数值中使用下划线进行分隔
  5. iOS 评论APP撰写评论
  6. Linux就该这么学-第三课
  7. 深度拷贝 java_java 深度拷贝 复制 深度复制
  8. 【小程序开发】微信小程序开发中遇到的那些坑...
  9. php 异步执行脚本,PHP语言实现脚本异步执行_PHP教程
  10. 绝了!kafka权威指南
  11. kis商贸系列加密服务器,金蝶KIS商贸系列V3.0发版说明教程.doc
  12. 各种软件以及插件官网地址 echarts Vscode 阿里云图标库 鼠标图标
  13. 10. logback详解,Flink流处理案例及Hive和Hbase的整合
  14. 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
  15. JAVA基础+集合+多线程+JVM
  16. PowerMILL 2018四五轴编程后处理宏制作视频教程
  17. 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树
  18. php地图打点,php – 点击地图后获取地址
  19. 表格 树形结构 HTML CSS,基于jQuery ztree实现表格风格的树状结构
  20. pdffactory 打印字体_使用pdfFactory虚拟打印机为打印PDF文件添加文字批注

热门文章

  1. 解决sea.js引用jQuery提示$ is not a function的问题
  2. 通过手动抛自定义异常实现spring事务回滚
  3. 在Java中编码为Base64
  4. 寻求有用的Eclipse Java代码模板[关​​闭]
  5. 我如何开始使用Node.js [关闭]
  6. java subset_Java中的TreeSet的subSet()方法 Java.util.TreeSet.subSet() - Break易站
  7. urtlebot3启动键盘控制后 /cmd_vel 会持续输出数据,在键盘不给信号时 /cmd_vel 续输,导致此功能与导航同时启动,会导致小车自动行走时一顿一顿的
  8. dpkg: 依赖关系问题使得 linux-headers-5.7.19-050719-generic 的配置工作不能继续
  9. web网络图片查看器Android
  10. mysql正删改查返回值_MySQL增删改查