QT按下两次按钮,保存这期间内变换的QtextEdit控件内的数据
这个功能在项目中很常见,对界面里某个控件的数据进行记录,我这个是每秒记录5次,实际就是每200ms触发一次定时器,来满足需求。
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
int Times,portTime,lineEditData;
void processReceivedData(const QByteArray &data);
private:
Ui::Widget *ui;
bool isSaving = false; // 控制保存状态
QString fileName; // 保存文件名
QFile file; // 文件对象
QTimer *timer1; // 定时器
StringList dataBuffer; // 缓存数据
private slots:
void on_VANDI_2_clicked(); //缓存电压电流数据
void saveData();
//.c文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(timer, &QTimer::timeout, this, &Widget::saveData); //槽函数
}
//保存电压电流数据
void Widget::on_VANDI_2_clicked()
{
if (!isSaving) {
// 开始保存数据
ui->VANDI_2->setText(tr("停止缓存"));
dataBuffer.clear(); // 清空数据缓存
// 启动定时器,每200毫秒保存一次数据,总共5次
timer->start(200);
isSaving = true; // 设置保存状态为真
} else {
// 停止定时器,准备保存数据到文件
timer->stop();
isSaving = false; // 设置保存状态为假
// 弹出保存文件对话框
fileName = QFileDialog::getSaveFileName(this, "保存电压电流数据", "", "文本文件 (*.txt);;所有文件 (*)");
if (fileName.isEmpty()) {
return; // 用户取消了保存文件对话框
}
// 打开文件进行写入
file.setFileName(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, "err", "err");
return;
}
// 写入缓存的数据到文件
QTextStream out(&file);
for (const QString &data : dataBuffer) {
out << data;
}
// 关闭文件
file.close();
ui->VANDI_2->setText(tr("缓存电流电压数据"));
QMessageBox::information(this, "succss", "ssss");
}
}
void Widget::saveData()
{
if (isSaving) {
QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
// 构建要保存的数据字符串
QString data = timestamp+": "+
"VDDA: " + QString::number(VDDA, 'f', 4) + "V"+ "|" + "VDDAI: "+QString::number(VDDAI, 'f', 4)+ "A"+" " +
"VDDD: " + QString::number(VDDD, 'f', 4) + "V"+ "|" + "VDDDI: "+QString::number(VDDDI, 'f', 4)+ "A"+" " +
"VDDIO: " + QString::number(VDDIO, 'f', 4)+ "V" + "|" +"VDDIOI: " +QString::number(VDDIOI, 'f', 4)+ "A"+" " +
"VDDAD: " + QString::number(VDDAD, 'f', 4)+ "V" + "|" +"VDDADI: " +QString::number(VDDADI, 'f', 4)+ "A"+" " +
"VDDPIX: " + QString::number(VDDPIX, 'f', 4)+ "V" + "|" +"VDDPIXI: " + QString::number(VDDPIXI, 'f', 4)+ "A"+" " +
"VGRSTH: " + QString::number(VGRSTH, 'f', 4)+ "V" + "|" +"VGRSTHI: " + QString::number(VGRSTHI, 'f', 4)+ "A" +" " +
"VTXH: " + QString::number(VTXH, 'f', 4) + "V"+ "|" +"VTXHI: " +QString::number(VTXHI, 'f', 4)+ "A" +" " +
"VTXL: " + QString::number(VTXL, 'f', 4)+ "V" + "|" +"VTXL_AD: " +QString::number(VTXL_AD, 'f', 4)+ "A"+" " +
"VGRSTL: " + QString::number(VGRSTL, 'f', 4)+ "V" + "|" +"VGESTL_AD: " + QString::number(VGESTL_AD, 'f', 4)+ "A"+" " +
"VDD_POS: " + QString::number(VDD_POS, 'f', 4)+ "V" + "|" +"VDD_POSI: " + QString::number(VDD_POSI, 'f', 4)+ "A"+" " +
"GND_ENG: " + QString::number(GND_ENG, 'f', 4)+ "V" + "|" +"VDD_POS_AD: " + QString::number(VDD_POS_AD, 'f', 4)+ "A"+" " +
"\n";
// 将数据添加到缓存中
dataBuffer.append(data);
}
}