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

文章目录

  • 界面
  • 学生类
  • 序列化函数
  • 反序列化函数
  • 刷新所选择的下拉表值
  • 添加

界面

Qt 序列化函数和反序列化函数_第1张图片

学生类

// 创建学生信息类
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("");

}

你可能感兴趣的:(qt,开发语言)