qt 串口粘包_用Qt 5写一个串口收发桌面工具
今天用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写一个串口收发桌面工具相关推荐
- QT tcp粘包问题
QT tcp粘包问题 2016年12月27日 23:50:06 月下独奏 阅读数 1282更多 分类专栏: QT 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文 ...
- 手把手教你写一个串口调试助手
硬件攻城狮 2022-05-20 14:05 发表于广东 果果小师弟. 电子信息工程硕士在读,分享单片机.嵌入式linux.物联网等知识,致力于打造最硬核的嵌入式技术公众号. 摘要:前段时间发布了一个 ...
- 从零开始,教你写一个串口调试助手
摘要:相信很多小伙伴都没接触过QT,如果想用QT写一个调试助手,首先是要会一点C++语法.只要能看得懂C++的代码,就能很快的写一个串口调试助手. 下面先推荐两个视频教程,感兴趣的可以看一看! 1.B ...
- python监听多个udp端口_用Python写一个UDP端口测试工具(一)
需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...
- qt 串口粘包_Qt Socket 传输图片——图像拆包、组包、粘包处理
之前给大家分享了一个使用python发图片数据.Qt server接收图片的Demo.之前的Demo用于传输小字节的图片是可以的,但如果是传输大的图片,使用socket无法一次完成发送该怎么办呢?本次 ...
- qt 串口粘包_qt tcp粘包处理办法
小编在使用qt进行tcp传输时候,接收端遇到接收粘包问题.现在将解决思路描述如下. 1.发送数据格式 一帧数据以!开头以?结尾,帧数据间以+区分 例如:!12#21#32#23#50?+ 2.接收端处 ...
- QT TCP粘包问题解决方案
tcp中当两包数据发送间隔很短的时候,接收的时候就会出现两个包粘在一起的情况,也就是粘包. a.简单的解决方法:控制发送间隔,使用定时器延时(图形界面不要用sleep除非开线程)让不能黏在一起的包分开 ...
- qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...
技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...
- qt web混合编程_基于Qt与MATLAB的混合编程技术
摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...
最新文章
- 美国再出半导体新法案!1800亿谋求芯片制造振兴
- 【Node】node.js实现服务器的反向代理,解决跨域问题
- RocketMQ-控制台的安装与启动
- java数字分割的下划线_Java-数值中使用下划线进行分隔
- iOS 评论APP撰写评论
- Linux就该这么学-第三课
- 深度拷贝 java_java 深度拷贝 复制 深度复制
- 【小程序开发】微信小程序开发中遇到的那些坑...
- php 异步执行脚本,PHP语言实现脚本异步执行_PHP教程
- 绝了!kafka权威指南
- kis商贸系列加密服务器,金蝶KIS商贸系列V3.0发版说明教程.doc
- 各种软件以及插件官网地址 echarts Vscode 阿里云图标库 鼠标图标
- 10. logback详解,Flink流处理案例及Hive和Hbase的整合
- 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
- JAVA基础+集合+多线程+JVM
- PowerMILL 2018四五轴编程后处理宏制作视频教程
- 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树
- php地图打点,php – 点击地图后获取地址
- 表格 树形结构 HTML CSS,基于jQuery ztree实现表格风格的树状结构
- pdffactory 打印字体_使用pdfFactory虚拟打印机为打印PDF文件添加文字批注
热门文章
- 解决sea.js引用jQuery提示$ is not a function的问题
- 通过手动抛自定义异常实现spring事务回滚
- 在Java中编码为Base64
- 寻求有用的Eclipse Java代码模板[关​​闭]
- 我如何开始使用Node.js [关闭]
- java subset_Java中的TreeSet的subSet()方法 Java.util.TreeSet.subSet() - Break易站
- urtlebot3启动键盘控制后 /cmd_vel 会持续输出数据,在键盘不给信号时 /cmd_vel 续输,导致此功能与导航同时启动,会导致小车自动行走时一顿一顿的
- dpkg: 依赖关系问题使得 linux-headers-5.7.19-050719-generic 的配置工作不能继续
- web网络图片查看器Android
- mysql正删改查返回值_MySQL增删改查