当前位置: 首页 > article >正文

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);
       }
}


http://www.kler.cn/a/416893.html

相关文章:

  • spark同步mysql数据到sqlserver
  • Linux的文件系统
  • Windows利用conda安装gpu版本Faiss + Ubuntu源码安装Faiss-gpu 记录(待更新~)
  • 多线程 03 实现方式
  • vue中如何获取public路径
  • Zookeeper选举算法与提案处理概览
  • 「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
  • PDF文件怎么加密?如何给pdf文档加密码保护?(2025全新科普)
  • css使盒子在屏幕的地点固定
  • EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
  • 数据结构题库9
  • 实时数据开发 | Flink反压机制原因、影响及解决方案
  • 【PyTorch】(基础三)---- 图像读取和展示
  • 关于音频 DSP 的接口种类以及其应用场景介绍
  • 【Spring篇】SpringMVC的常见数据绑定
  • 基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
  • Gelsight视触觉3D显微系统:独特视触技术助力多用途检测
  • B站狂神说Mybatis+Spring+SpringMVC整合理解(ssm框架整合)
  • 小型文件系统如何选择?FatFs和LittleFs优缺点比较
  • win10系统部署RAGFLOW+Ollama教程
  • LVS-DR工作模式简介(相对nat性能更高)
  • Redis3——线程模型与数据结构
  • 数据结构 (20)二叉树的遍历与线索化
  • 【RL Base】强化学习:信赖域策略优化(TRPO)算法
  • python3 自动更新的缓存类
  • 多类别的大豆叶病识别模型复现