#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
serialport = new QSerialPort;
connect(serialport,SIGNAL(readyRead()),this,SLOT(serialportReadyRead_Slot()));
// 获取可用的串口信息
QList<QSerialPortInfo> serialPorts = QSerialPortInfo::availablePorts();
// 遍历每个串口信息
foreach (const QSerialPortInfo &serialPortInfo, serialPorts) {
// 获取串口号
QString portName = serialPortInfo.portName();
ui->serialCb->addItem(portName); // 更新文本框的内容
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::serialportReadyRead_Slot()
{
QByteArray data = serialport->readAll(); // 读取串口接收缓冲区中的数据
QString buf;
// 获取当前时间并转换为字符串
QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
// 将每个字节转换为十六进制字符串并拼接
for (int i = 0; i < data.size(); i++)
{
buf += QString("%1 ").arg(static_cast<quint8>(data.at(i)), 2, 16, QLatin1Char('0')).toUpper();
}
// 将时间戳和数据拼接成一行字符串
QString lineStr = QString("[%1] %2").arg(timeStr).arg(buf);
ui->recvEdit->appendPlainText(lineStr); // 将数据追加到接收编辑框中显示
}
void Widget::on_openBt_clicked()
{
QSerialPort::BaudRate baudRate = QSerialPort::UnknownBaud;
QSerialPort::DataBits databits = QSerialPort::UnknownDataBits;
QSerialPort::StopBits stopbits = QSerialPort::UnknownStopBits;
QSerialPort::Parity checkBits = QSerialPort::UnknownParity;
if(ui->baundrateCb->currentText()=="4800")
{
baudRate = QSerialPort::Baud4800;
}else if(ui->baundrateCb->currentText()=="9600")
{
baudRate = QSerialPort::Baud9600;
}else if(ui->baundrateCb->currentText()=="115200")
{
baudRate = QSerialPort::Baud115200;
}
if(ui->dataCb->currentText() == "5")
{
databits = QSerialPort::Data5;
}else if(ui->dataCb->currentText() == "6")
{
databits = QSerialPort::Data6;
}else if(ui->dataCb->currentText() == "7")
{
databits = QSerialPort::Data7;
}else if(ui->dataCb->currentText() == "8")
{
databits = QSerialPort::Data8;
}
if(ui->stopCb->currentText()=="1")
{
stopbits = QSerialPort::OneStop;
}else if(ui->stopCb->currentText() == "1.5")
{
stopbits = QSerialPort::OneAndHalfStop;
}else if(ui->stopCb->currentText() == "2")
{
stopbits = QSerialPort::TwoStop;
}
if(ui->checkCb->currentText() == "none")
{
checkBits = QSerialPort::NoParity;
}
serialport->setPortName(ui->serialCb->currentText());
serialport->setBaudRate(baudRate);
serialport->setDataBits(databits);
serialport->setStopBits(stopbits);
serialport->setParity(checkBits);
if(serialport->open(QIODevice::ReadWrite)==true)
{
QMessageBox::information(this,"提示","成功");
}else{
QMessageBox::critical(this,"提示","失败");
}
}
void Widget::on_closeBt_clicked()
{
serialport ->close();
}
void Widget::on_sendBt_clicked()
{
serialport ->write(ui->sendEdit ->text().toLocal8Bit().data());
}
void Widget::on_clearBt_clicked()
{
ui->recvEdit ->clear();
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT的c++实现串口助手的收发适合毕设(附源码)

共28个文件
sample:13个
cpp:2个
user:1个


温馨提示
这段代码是一个基于Qt框架和C++语言编写的串口助手程序,主要实现了串口的打开、关闭、发送和接收功能。下面是代码中涉及到的一些重要部分: 1. **Widget类的构造函数和析构函数**: - 构造函数中初始化了UI界面,创建了一个QSerialPort对象serialport,并连接了readyRead信号到serialportReadyRead_Slot槽函数。 - 在构造函数中获取可用的串口信息,并将每个串口的串口号添加到下拉框中。 - 析构函数中释放了ui指针。 2. **serialportReadyRead_Slot槽函数**: - 当串口接收到数据时触发,读取串口接收缓冲区中的数据。 - 获取当前时间并转换为字符串。 - 将接收到的数据转换为十六进制字符串,并拼接时间戳,最终显示在接收编辑框中。 3. **on_openBt_clicked槽函数**: - 根据用户选择的波特率、数据位、停止位和校验位配置串口参数。 - 打开串口,并根据打开结果弹出提示框。 4. **on_closeBt_clicked槽函数* 等等
资源推荐
资源详情
资源评论

格式:zip 资源大小:190.4KB




























收起资源包目录








































共 28 条
- 1
资源评论

- ·H·4332024-11-22挺不错的,感觉很好用,代码写得很清晰,值得细看。 #完美解决问题 #运行顺畅 #内容详尽

不良人码农
- 粉丝: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 微软面试题及答案很需要开放性思维啊.doc
- 毕业设计基于PLC的小车运动控制系统.doc
- 下一代云计算平台-建设方案.doc
- asp-access网上人才信息管理完整.doc
- 基于BS的日常费用报销管理系统软件工程课程方案.doc
- 设计院主导的总承包模式项目管理分析.docx
- 信息化建设实践与探索.docx
- 大数据背景下商业银行信用卡风险防范策略研究.docx
- linux常用命令.doc
- 项目管理的多维度集成创新模式研究.docx
- 一个中小企业网络规划与研发方案.doc
- 学生请假管理系统需求分析设计方案文档(附待部分核心代码-ssh框架实现).doc
- WEB30时代广告.ppt
- PLC的三自由度机械手控制系统设计方案6.doc
- 阐述大数据环境下科技项目的管理.docx
- 计算机信息安全技术及防护分析.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
