关于用文件读写QGraphicsItem内容的有关问题

关于用文件读写QGraphicsItem内容的问题。
void MainWindow::save()
{
  QList<QGraphicsItem *> it = scene->items();
  file = new QFile;
  if(!file->open(QIODevice::WriteOnly|QIODevice::Truncate)) ;
  return;

  QDataStream out(file);
  for(int i =0;i<it.size();i++)
  {
  out<<it;
  }
}
void MainWindow::setall(QModelIndex x)
{
  if(x.row()==0)
  {

  QList<QGraphicsItem *> it;
  if(!file->open(QIODevice::ReadOnly))
  return;
  QDataStream in(file);
  in>>it;
  for(int i=0;i<it.size();i++)
  {
  scene->addItem(it.value(i));
  }


  }
  curIndex = &x;
}

结果报错,可以确定于MainWindow的其他地方无关,就是文件读写出错。希望大神指点。

------解决方案--------------------
void MainWindow::save()
{
QList<QGraphicsItem *> it = scene->items();
file = new QFile; // file在哪里声明的?
if(!file->open(QIODevice::WriteOnly|QIODevice::Truncate)) ;
return;

QDataStream out(file);
for(int i =0;i<it.size();i++)
{
out<<it;//QDataStream不能读写QGraphicsItem,你自己为QGraphicsItem写了<<函数
}
}
void MainWindow::setall(QModelIndex x)
{
if(x.row()==0)
{

QList<QGraphicsItem *> it;
if(!file->open(QIODevice::ReadOnly)) // file在哪里声明的?用->说明file是个指针,在哪里new的?
return;
QDataStream in(file);
in>>it;QDataStream不能读写QGraphicsItem,你自己为QGraphicsItem写了>>函数
for(int i=0;i<it.size();i++)
{
scene->addItem(it.value(i));
}


}
curIndex = &x;
}
目前就发现这些问题。