0

我正在尝试将名为 f 的对象保存到文件中,但出现错误:流 << f 中的运算符 << 不匹配

这是功能:

void FilmWriter::saveFilm(Film& f){
    QString fileName = QFileDialog::getSaveFileName(this,("Save File"));
          if (fileName != "") {
              QFile file(fileName);
              if (!file.open(QIODevice::WriteOnly)) {
                  QMessageBox::critical(this, ("Error"),("Could not open file"));// error message
              } else {
                  QTextStream stream(&file);
                  stream << f;
                  stream.flush();
                  file.close();
              }
          }

}

如果您需要更多信息,请告诉我?这些是不同类 filmInput 中的 2 个函数

void FilmInput::getFilm(){
    Film f1(titleEdit->toPlainText(),durationEdit->toPlainText().toInt() ,directorEdit->toPlainText(),
             QDate::fromString(relDateEdit->toPlainText(),"dd/MM/YYYY"));;
    obtainFilmData(f1);
}

void FilmInput::obtainFilmData(Film &f){
    saveFilm(f);
}
4

2 回答 2

2

QTextStream用于存储文本,而不是Film. 您需要可以存储您的对象的东西。也许QDataStream会帮助你?但是您需要将Film对象序列化为QByteArray.

更新:
现在我看到您需要Film::toString()可以为您提供对象的字符串表示形式的方法Film。然后你只写stream<<f.toString();而不是stream<<f;.
或者您可以实现operator<<需要QTextStreamFilm.
示例Film::toString()

QString Film::toString()
{
  return mTitle + " " + mDuration + " " + mDirector + " " + mDate.toString();
}
于 2013-08-13T13:51:05.000 回答
0

使用下面的函数(在语法上可能不是 100% 正确),您现在可以写入您的流,Film.toString()

QString Film::toString()
{ 
    QTextStream stream;
    stream << someFilmVariable << " " << someOtherFilmVariable;
    return stream.string()
}
于 2013-08-13T14:14:17.740 回答