qt 关于二进制文件(类对象)读入的问题

困比比 2016-12-29 08:50:38
//写入数据的函数
void StaffMSClass::pB_output_click()
{
//初始化.dat
staffClass *sta = new staffClass[15];
sta[0] = { "Cheng", "Male", 22, "12049503394859", "Mechanical", "Engineer", "100000" };
sta[1] = { "Xu", "Male", 22, "12049504723539", "Mechanical", "Engineer", "120000" };
sta[2] = { "Li", "Male", 22, "1204950339sdx9", "Mechanical", "Engineer", "80000" };
sta[3] = { "Ohuo", "Male", 22, "12049503394fc9", "Mechanical", "Engineer", "60000" };
sta[4] = { "Qu", "Male", 22, "12129503394859", "Mechanical", "Engineer", "60000" };
sta[5] = { "Liu", "Male", 22, "1fd49503394859", "Mechanical", "Engineer", "40000" };
sta[6] = { "Zhang", "Male", 22, "11249503394859", "Mechanical", "Engineer", "40000" };
sta[7] = { "Zhu", "Male", 22, "12043503394859", "Mechanical", "Engineer", "70000" };
sta[8] = { "Qiu", "Male", 22, "12045673394859", "Mechanical", "Engineer", "200000" };
sta[9] = { "Xia", "Male", 22, "12049534594859", "Mechanical", "Engineer", "30000" };
sta[10] = { "La", "Male", 22, "12049565494859", "Mechanical", "Engineer", "300000" };
sta[11] = { "Wen", "Male", 22, "12047653394859", "Mechanical", "Engineer", "30000" };
sta[12] = { "Gu", "Male", 22, "12049457394859", "Mechanical", "Engineer", "50000" };
sta[13] = { "Mo", "Male", 22, "12049537594859", "Mechanical", "Engineer", "10000" };
sta[14] = { "Jiang", "Male", 22, "12375503394859", "Mechanical", "Engineer", "30000" };

QFile file("staff.dat");
if (!file.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this, tr("warning"), tr("Cannot open file for writing:"), QMessageBox::Yes);
return;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_5_7);
out << qint32(ui2.tableWidget->rowCount());
for (int i = 0;i < 15;++i)
{
out << sta[i];
}
file.close();
QMessageBox::information(this, tr("Finished"), tr("Saved to document staff.dat"), QMessageBox::Yes);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//读入数据的函数
void StaffMSClass::pB_input_click()
{
//写入文件
QFile file("staff.dat");
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::warning(this, tr("warning"), tr("Cannot open file for reading:"), QMessageBox::Yes);
return;
}

//初始化
QDataStream in(&file);
in.setVersion(QDataStream::Qt_5_7);
qint32 sta_row = 0;
in >> sta_row;
staffClass *sta = new staffClass[sta_row];

//读入数据到类数组
for (int i = 0;i < 2;++i)
{
in >> sta[i];
}

//输出到电子表格中
for (qint32 row=0;row<sta_row;++row)
{
ui2.tableWidget->item(row, 0)->setText(sta[row].name_show());
ui2.tableWidget->item(row, 1)->setText(sta[row].sex_show());
ui2.tableWidget->item(row, 2)->setText(QString::number(sta[row].age_show()));
ui2.tableWidget->item(row, 3)->setText(sta[row].id_show());
ui2.tableWidget->item(row, 4)->setText(sta[row].section_show());
ui2.tableWidget->item(row, 5)->setText(sta[row].post_show());
ui2.tableWidget->item(row, 6)->setText(sta[row].salary_show());
}
file.close();
}

最后查看输出结果发现sta_row成功读到15,sta[0]成功读到所有成员数据,但其他14个对象成员数据都读的是空或是0,不知道哪里出了问题,还请各位能够解答。
...全文
396 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2017-01-04
  • 打赏
  • 举报
回复
帮结贴
  • 打赏
  • 举报
回复
我来接分啦!谢谢LZ
困比比 2016-12-29
  • 打赏
  • 举报
回复
已解决,重载<<时输完了成员数据后手抖加了一个endl
困比比 2016-12-29
  • 打赏
  • 举报
回复
此处为这个,i<2只是想测试下 //读入数据到类数组 for (int i = 0;i < sta_row;++i) { in >> sta[i]; }

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧