gpt4 book ai didi

c++ - 如何编写QVector fo txt文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:03 26 4
gpt4 key购买 nike

我正在尝试编写由我的类的对象组成的 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;
}
};

添加电影.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 并且应该有公共(public)默认和复制构造函数以及公共(public)析构函数。您还应该拥有宏 Q_DECLARE_METATYPE(Film)

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

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

关于c++ - 如何编写QVector fo txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com