65,183
社区成员




void MainWindow::update_slope_offset()
{
//把slope和offset数据存到文件里,下次直接取出来用
bool sloperet = slopefile.open(QIODevice::WriteOnly); //以读写形式打开slope文件,返回true打开成功
if(!sloperet)
{
qDebug() << "slope open falied:";
return;
}
QDataStream saveslope(&slopefile);
saveslope.setVersion(QDataStream::Qt_5_0);
for(int i=0;i<320*256;i++)
{
saveslope << slope[i];
}
slopefile.close();
bool offsetret = offsetfile.open(QIODevice::WriteOnly); //以读写形式打开offset文件
if(!offsetret)
{
qDebug() << "offset open falied:";
return;
}
QDataStream saveoffset(&offsetfile);
saveoffset.setVersion(QDataStream::Qt_5_0);
for(int i=0;i<320*256;i++)
{
saveoffset << offset[i];
}
offsetfile.close();
get_slope_offset(); //这里读的时候没问题,不是0
}
void MainWindow::get_slope_offset()
{
printf("slope[0]=%.6f,offset[0]=%.6f\r\n",slope[0],offset[0]);
//从文件中获取slope和offset
bool sloperet = slopefile.open(QIODevice::ReadOnly); //以读写形式打开slope文件,返回true打开成功
if(!sloperet)
{
qDebug() << "slope open falied:";
return;
}
QDataStream getslope(&slopefile);
getslope.setVersion(QDataStream::Qt_5_0);
for(int i=0;i<320*256;i++)
{
getslope >> slope[i];
printf("get slope[%d]=%.6f\r\n",i,slope[i]);
}
slopefile.close();
bool offsetret = offsetfile.open(QIODevice::ReadOnly); //以读写形式打开offset文件
if(!offsetret)
{
qDebug() << "offset open falied:";
return;
}
QDataStream getoffset(&offsetfile);
getoffset.setVersion(QDataStream::Qt_5_0);
for(int i=0;i<320*256;i++)
{
getoffset >> offset[i];
printf("get offset[%d]=%.6f\r\n",i,offset[i]);
}
offsetfile.close();
if((slope[0] > 0.0001 || slope[0] < -0.0001) && (offset[0] > 0.0001 || offset[0] < -0.0001))
{
flag = true;
}else
{
flag = false;
}
printf("slope[0]=%.6f,offset[0]=%.6f\r\n",slope[0],offset[0]);
}
我在工程开始的地方去调用get_slope_offset(),读出来的都是0,但是在写入之后,直接调用get_slope_offset(),数据是没问题的,就是下次启动再运行时,先调用get_slope_offset()读出来的都是0
直接用标准库的ifstream、ofstream,比用Qt的包装还简单~
选几个关键时间点亲自看一下数据文件内容不就明白了么?