QT程序:串口接收数据后生成TXT文件,把相应的串口数据按照发送时间存入,
时间: 2024-03-17 10:42:30 浏览: 107
用 QT 实现的串口收发程序
好的,下面是一个将串口接收到的数据生成TXT文件,并按照发送时间存储的QT程序示例:
```c++
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QFile>
#include <QDateTime>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 查找可用串口
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->comboBox->addItem(info.portName());
serial.close();
}
}
// 设置波特率下拉菜单默认显示第三项
ui->comboBox_2->setCurrentIndex(3);
// 初始化串口
serial = new QSerialPort;
connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// 打开串口
serial->setPortName(ui->comboBox->currentText());
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(ui->comboBox_2->currentText().toInt());
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
if(serial->isOpen())
{
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(true);
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
}
}
void MainWindow::on_pushButton_2_clicked()
{
// 关闭串口
serial->clear();
serial->close();
if(!serial->isOpen())
{
ui->pushButton->setEnabled(true);
ui->pushButton_2->setEnabled(false);
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
}
}
void MainWindow::Read_Data()
{
// 读取串口数据
QByteArray buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str += QString(buf);
ui->textEdit->clear();
ui->textEdit->append(str);
// 将数据存入TXT文件
QFile file("data.txt");
if(file.open(QIODevice::Append | QIODevice::Text))
{
QDateTime current_time = QDateTime::currentDateTime();
QString current_time_str = current_time.toString("yyyy-MM-dd hh:mm:ss.zzz");
file.write(current_time_str.toUtf8());
file.write(": ");
file.write(buf);
file.write("\n");
file.close();
}
else
{
QMessageBox::warning(this, "Error", "Failed to open file!");
}
}
}
void MainWindow::on_pushButton_3_clicked()
{
// 发送数据
QString str = ui->textEdit_2->toPlainText();
QByteArray buf = str.toUtf8();
serial->write(buf);
}
void MainWindow::on_pushButton_4_clicked()
{
// 清空接收框
ui->textEdit->clear();
}
void MainWindow::on_pushButton_5_clicked()
{
// 清空发送框
ui->textEdit_2->clear();
}
```
这个程序在读取串口数据时,将其存入TXT文件,并在每条数据前面添加当前时间戳。具体的存储方式可以根据实际需求进行修改。
阅读全文