• Qt 序列化函数和反序列化函数


    在这里插入图片描述

    界面

    在这里插入图片描述

    学生类

    // 创建学生信息类
    class studentInfo
    {
    public:
        QString id;     // 学号
        QString name;   // 学生姓名
        QString age;        // 学生年龄
        // 重写QDataStream& operator<<操作符,做数据序列化操作
        friend QDataStream& operator<<(QDataStream &stream, const studentInfo &student)
        {
            // 将数据输入流对象中
            stream << student.id;
            stream << student.name;
            stream << student.age;
            return stream;
        }
    
        // 重写QDataStream& operator>>操作符,做数据反序列化操作
        friend QDataStream& operator>>(QDataStream &stream, studentInfo &student)
        {
            // 从流对象中输出数据到学生结构体引用中
            stream >> student.id;
            stream >> student.name;
            stream >> student.age;
            return stream;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    序列化函数

    将其放入容器内方便便利每一个学生参数的值

     QList<studentInfo> list;
     studentInfo student;
    
    • 1
    • 2

    获取文本编辑的值读取到序列化文件中进行保存

    //保存
    void MainWindow::on_pushButton_clicked()
    {
        studentInfo student;
        //序列化为二进制文件存在本地
        QFile file(QApplication::applicationDirPath()+"/"+"student.st");           //定义文件路径
        file.open(QIODevice::WriteOnly); //以只写模式打开
        QDataStream out(&file);          //定义数据流
    
    
    
        student.id=ui->m_Id->text();
        student.age=ui->m_Age->text();
        student.name=ui->m_Name->text();
    
        list.append(student);
    
        out<<list;
        qDebug()<<list[0].id;
        file.close();
        qDebug()<<(QString("OK"));
        ReShowCombox();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    刷新下拉表的值

    void MainWindow::ReShowCombox()
    {
        // 获取 studentInfo 对象
        if(list.size()>0)
        {
           ui->comboBox->addItem(list.last().name);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    反序列化函数

    读取文件的值,添加到下拉列表中

    void MainWindow::GetFile()
    {
        studentInfo student;
        //反序列化本地二进制文件到程序中
        QFile file(QApplication::applicationDirPath()+"/"+"student.st");//文件在程序运行目录下
        if(file.exists())//如果文件存在,则从文件读取数据
         {
              file.open(QIODevice::ReadOnly);
              QDataStream in(&file);
    
    
              in>>list;
              file.close();
    
          }
    
        // 获取 studentInfo 对象
        if(list.size()>0)
        {
            student.id=list.at(0).id;
            student.age=list.at(0).age;
            student.name=list.at(0).name;
            ui->m_Id->setText(student.id);
            ui->m_Age->setText(student.age);
            ui->m_Name->setText(student.name);
    
            for(int i=0;i<list.size();i++)
            {
                ui->comboBox->addItem(list.at(i).name);
            }
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    刷新所选择的下拉表值

    连接信号与槽函数

     connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::on_comboBox_currentIndexChanged);
    
    • 1

    获取到当前的值

    void MainWindow::on_comboBox_currentIndexChanged(int index)
    {
        if (index >= 0) {
               // 获取当前选中项的 studentInfo 对象
               studentInfo student = list.at(index);
    
               // 刷新其他控件的值
               ui->m_Id->setText(student.id);
               ui->m_Name->setText(student.name);
               ui->m_Age->setText(student.age);
           }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    添加

    void MainWindow::on_pushButton_2_clicked()
    {
        ui->m_Id->setText("");
        ui->m_Name->setText("");
        ui->m_Age->setText("");
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    【智能优化算法-海马优化器】基于海马优化器求解单目标优化问题附matlab代码
    用pytorch给深度学习加速:正交与谱归一化技术
    MATLAB:电机控制(Motor Control)
    小米手机安装面具教程(Xiaomi手机获取root权限)
    SpringBoot和Vue实现用户个人信息展示与保存与集成JWT——基于SpringBoot和Vue的后台管理系统项目系列博客(十四)
    APS自动排产-AP工厂高级计划
    Kolla-ansible部署openStack
    【算法】第二代遗传算法NSGA-II优化SVR超参数模型
    260. 只出现一次的数字 III
    WinUI 3 踩坑记:前言
  • 原文地址:https://blog.csdn.net/weixin_45672157/article/details/134036489