14
私はReading/writing QObjects を使用しますか? 私はそれを使ってクラスをシリアライズしますが、逆シリアル化するときは元のクラスではありません!Qtでカスタムクラスをシリアライズ
私は何ができますか?
これが私の基本クラスのヘッダーです:
class Base : public QObject
{
Q_OBJECT
public:
explicit Base(QObject *parent = 0);
};
QDataStream &operator<<(QDataStream &ds, const Base &obj);
QDataStream &operator>>(QDataStream &ds, Base &obj) ;
との.cppです:
Base::Base(QObject *parent) :
QObject(parent)
{
}
QDataStream &operator<<(QDataStream &ds, const Base &obj) {
for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
if(obj.metaObject()->property(i).isStored(&obj)) {
ds << obj.metaObject()->property(i).read(&obj);
}
}
return ds;
}
QDataStream &operator>>(QDataStream &ds, Base &obj) {
QVariant var;
for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
if(obj.metaObject()->property(i).isStored(&obj)) {
ds >> var;
obj.metaObject()->property(i).write(&obj, var);
}
}
return ds;
}
と私はベースから継承する学生のクラスがあります。
class student : public Base
{
public:
student();
int id;
QString Name;
};
し、それを私のメインです:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
student G;
student G2;
G.id=30;
G.Name="erfan";
qDebug()<<G.id<<G.Name;
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out <<G;
qDebug()<<G2.id<<G2.Name;
file.close();
file.open(QIODevice::ReadOnly);
out>>G2;
qDebug()<<G2.id<<G2.Name;
return a.exec();
}
し、それは私の出力です:
30 "erfan"
1498018562 ""
1498018562 ""
はい、ありがとう、ありがとう、 –
はい、それは動作しますので、ありがとう、ありがとう、しかし私はQ_PROPERTYは何ですか?彼の議論は何ですか? READとは何ですか?書き込みは何ですか?彼らは構文ですか?どのようにテーマを学ぶことができますか?再度助けてください、ありがとう –
ドキュメントを読んでください。 metaObjectシステムについて読む。すべてがドキュメントです。ドキュメントの中に何か不明な点がある場合は、別の質問をしてください。 –