0

f というオブジェクトをファイルに保存しようとしましたが、エラーが発生しました: no match for operator << in stream << 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()Filmstream<<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 に答える