【QT】串口通信
第一步:在工程文件.pro中添加以下代码
QT += core gui serialport
第二步:在.h文件中添加以下代码
// 引入串口通信的两个头文件(第一步)
#include <QtSerialPort/QSerialPort> // 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo> // 提供系统中存在的串口信息
#include <QException>
#include <QDebug>
#include <QDateTime>
public:
void slotReadData();
public:
QSerialPort *serial = nullptr; // 定义全局的串口对象(第三步)
QDateTime dateTime;
private slots:
void on_toolButton_OpenPort_clicked();
void on_toolButton_ClosePort_clicked();
void on_toolButton_SendData_clicked();
第三步:在.cpp文件中添加以下代码
// 打开串口
void MainWindow::on_toolButton_OpenPort_clicked()
{
try {
if(serial == nullptr) {
serial = new QSerialPort();
}
serial->setPortName("COM6");
if(serial->open(QIODevice::ReadWrite)) {
qDebug() << "COM6 open";
serial->setBaudRate(9600);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
connect(serial, &QSerialPort::readyRead, this, &MainWindow::slotReadData);
}
} catch (std::exception ex) {
QMessageBox::information(NULL, "Title", ex.what(), QMessageBox::Yes, QMessageBox::Yes);
}
}
// 关闭串口
void MainWindow::on_toolButton_ClosePort_clicked()
{
if(serial != nullptr && serial->isOpen()) {
serial->clear();
serial->close();
delete serial;
serial = nullptr;
}
}
// 异步接收数据处理
void MainWindow::slotReadData()
{
QByteArray buffer = serial->readAll();
if(!buffer.isEmpty()) { //如果非空说明有数据接收
QString buffer_1;
//转换成16进制大写
QString str = buffer.toHex().data();
str = str.toUpper();
//一个16进制占4位,8位为一字节,所以每两位16进制空一格
for(int i = 0; i < str.length(); i += 2) {
QString str_1 = str.mid (i, 2);
buffer_1 += str_1;
buffer_1 += " ";
}
dateTime = QDateTime::currentDateTime(); //获取系统当前的时间
QString timeStr = dateTime .toString("yyyy-MM-dd hh:mm:ss");//格式化时间
ui->textEdit->append("[" + timeStr + "]" + buffer_1);
ui->textEdit->moveCursor(QTextCursor::End); //移动文本框内的插入符
}
buffer.clear();
}
// 发送数据
void MainWindow::on_toolButton_SendData_clicked()
{
if(serial != nullptr && serial->isOpen()) {
if(serial != nullptr && serial->isOpen()) {
//转换成utf8格式的字节流发送
// (ui->textEdit_Send->toPlainText().toUtf8();
QString data = ui->textEdit_Send->toPlainText();
// 按十六进制编码发送
QByteArray byte = QByteArray::fromHex (data.toLatin1().data());
serial->write(byte);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧