2015-07-09 16 views
0

Как я могу написать данные QVector, который состоит из объектов моего класса в файл? как я могу это сделать?Как я могу написать данные QVector, который состоит из объектов моего класса в файл?

+0

вам необходимо сериализовать свой класс. См. Здесь, например, [serialization-with-qt] (http://stackoverflow.com/questions/2570679/serialization-with-qt) [Qt5_QFile_Serialization_Class] (http://www.bogotobogo.com/Qt/Qt5_QFile_Serialization_Class.php), но есть много других сообщений. Мне было проще сериализовать [JSON] (http://doc.qt.io/qt-5/json.html) – Miki

ответ

1

Ваш вопрос довольно общий, но я сделаю все возможное.

Предположим, что вы написали класс, который хотите сохранить в QVector. Это достаточно просто:

class MyClass { 
public: 
    MyClass(double input) : a(input) {} 
private: 
    double a; 
}; 

QVector<MyClass> classes; 
classes.push_back(MyClass(1.0)); 
classes.push_back(MyClass(2.0)); 
classes.push_back(MyClass(3.0)); 

Вы хотите сериализовать класс MyClass так operator<< понимает, как писать в выходной поток. Вы можете сделать это, добавив следующие функции подписи к MyClass определения:

class MyClass { 
    // omitted 
    friend QDataStream& operator<<(QDataStream &stream, const MyClass &class) { 
     stream << class.a; 
     return stream; 
    } 
}; 

В то время как я определил operator<< в самом классе, вы должны определить его в файле реализации.

Теперь мы свободны записать вывод вектора в файл:

QString filename = "/path/to/output/file/myclass.txt"; 
QFile fileout(filename); 

if (fileout.open(QFile::ReadWrite | QFile::Text)) { 
    QTextStream stream(&fileout); 
    for (QVector<MyClass>::const_iterator it = classes.begin(); 
     it != classes.end(); ++it) { 
     out << *it; 
    } 

    // and close the file when you're done with it 
    fileout.close(); 
} 

Этого должно быть достаточно, чтобы вы начали. Имейте в виду, что я не тестировал этот код, поэтому используйте его на свой страх и риск!