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

序列化函数

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

 QList<studentInfo> list;
 studentInfo student;

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

//保存
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();
}

刷新下拉表的值

void MainWindow::ReShowCombox()
{
    // 获取 studentInfo 对象
    if(list.size()>0)
    {
       ui->comboBox->addItem(list.last().name);

    }
}

反序列化函数

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

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

    }

}

刷新所选择的下拉表值

连接信号与槽函数

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

获取到当前的值

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

添加

void MainWindow::on_pushButton_2_clicked()
{
    ui->m_Id->setText("");
    ui->m_Name->setText("");
    ui->m_Age->setText("");

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值