Qt - 如何为我的应用程序保存数据

时间:2014-08-04 07:23:03

标签: c++ qt save restore custom-type

我是Qt的新手,我在查找如何从您的应用程序中保存/加载数据时遇到了问题。

我正在创建一个日历应用程序,并且必须保存不同的类,如:死亡线,约会,生日等。

我找到了这个教程http://qt-project.org/doc/qt-4.8/tutorials-addressbook-part6.html,但它只描述了如何保存一种类型。

所以我想知道你是否可以帮助我,因为我不知道如何以这种方式保存/加载多个类,我不需要对它进行一些详细的描述(但当然会受到赞赏)但只有一个轻轻推进正确的方向。

因为在本教程中没有解释如何保存多个类:(

编辑:此程序适用于PC(学校项目)

1 个答案:

答案 0 :(得分:5)

您可以为其定义自定义类并实现流运算符:

class CustomType
{
public:

    CustomType()
    {
        paramter1=0;
        paramter2=0;
        paramter3="";

    }
    ~CustomType(){}

    int paramter1;
    double parameter2;
    QString parameter3;
};


inline QDataStream& operator<<( QDataStream &out, const CustomType& t )
{
    out<<t.paramter1;
    out<<t.paramter2;
    out<<t.paramter3;


    return out;
}
inline QDataStream& operator>>( QDataStream &in, CustomType& t)
{
    in>>t.paramter1;
    in>>t.paramter2;
    in>>t.paramter3;

    return in;
}

在流式传输类之前,您应该在启动应用程序时在代码中的某个位置注册类的流操作符。这可以在主窗口的构造函数中完成:

qRegisterMetaTypeStreamOperators<CustomType>("CustomType");

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

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

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;
 out << object2;

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

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;
  in >> object2;

请注意,读取和写入文件的顺序应该相同。