如何编写QVector fo txt文件

How to write QVector fo txt file

本文关键字:txt 文件 fo QVector 何编写      更新时间:2023-10-16

我正在尝试将由我类的对象组成的QVector写入文件,但它有一些问题。我需要将一些对象保存到.txt文件中,然后读取它们。但储蓄并不正确。我能用什么方式释放它?

胶片.h

class Film
{
public:
    QString title;
    int year;
    friend QDataStream &operator<< (QDataStream &stream, const Film obj)
    {
        stream << obj.title; //title only while i'm testing my program
        return stream;
    }
    friend QDataStream &operator>> (QDataStream &stream, Film &obj)
    {
        stream >> obj.title;
        return stream;
    }
};

AddFilm.cpp

void AddFilm::slotOkButtonClicked()
{
    QVector<Film> database;
    Film film;
    film.title = titleLine->text(); // QLineEdit where i input data
    film.year = yearLine->text().toInt(); // QLineEdit where i input data
    database.push_back(film);
    QFile file("database.fdtb");
    if(file.open(QIODevice::WriteOnly))
    {
        QDataStream out(&file);
        out << film;
        file.close();
    }

在流式处理类之前,启动应用程序时,应在代码中的某个位置注册类的流运算符。这可以在主窗口的构造函数中完成:

qRegisterMetaTypeStreamOperators<Film>("Film");

现在,您可以将类的对象保存到文件或从文件加载类的对象。

将自定义类的一些对象保存到文件中:

QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
         QMessageBox::information(this, tr("Unable to open file"),
             file.errorString());
         return;
 }

 QDataStream out(&file);
 out.setVersion(QDataStream::Qt_4_8);
 out << object1;

从文件加载自定义类的对象:

QFile file(fileName);
 if (!file.open(QIODevice::ReadOnly)) {
         QMessageBox::information(this, tr("Unable to open file"),
             file.errorString());
         return;
 }

  QDataStream in(&file);
  in.setVersion(QDataStream::Qt_4_8);
  in >> object1;

您也可以使用QSettings在应用程序中保存对象:

QSettings settings("organizationName","applicationName");
settings.setValue("settings/ّFilm",QVariant(film));

或者阅读它们:

Film film = settings.value(QString("settings/film")).value<Film>();

Film应该继承自QObject,并且应该具有公共默认构造函数和复制构造函数以及公共析构函数。您还应该拥有宏Q_DECLARE_METATYPE(Film)

如果需要使用文件,可以为QSettings:定义文件名

settings=new QSettings("Mysettings/film.ini", QSettings::IniFormat,this);