我正在尝试编写由我的类的对象组成的QVector文件并且遇到一些问题。我需要将一些对象保存到.txt文件,然后将它们读出来。但是储蓄不能正常运作。我可以释放它的方式是什么?
Film.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();
}
答案 0 :(得分:2)
在流式传输类之前,您应该在启动应用程序时在代码中的某个位置注册类的流操作符。这可以在主窗口的构造函数中完成:
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);