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