Qt 尝试使用QSettings序列化QObject类时发生读取访问冲突

Qt 尝试使用QSettings序列化QObject类时发生读取访问冲突,qt,qt5,qmetaobject,Qt,Qt5,Qmetaobject,大家好,我有一个从QObject继承的foo类,我想使用QSettings进行序列化。 foo.h中的代码 namespace GUI { class Foo : public QObject { Q_OBJECT Q_PROPERTY(QString mem1 READ mem1 WRITE setMem1 NOTIFY mem1Changed) Q_PROPERTY(QString mem2 READ mem2 WRITE setMem2 NOTIFY mem2Changed) Q_PROP

大家好,我有一个从QObject继承的foo类,我想使用QSettings进行序列化。 foo.h中的代码

namespace GUI
{
class Foo : public QObject
{
Q_OBJECT
Q_PROPERTY(QString mem1 READ mem1 WRITE setMem1 NOTIFY mem1Changed)
Q_PROPERTY(QString mem2 READ mem2 WRITE setMem2 NOTIFY mem2Changed)
Q_PROPERTY(int mem3 READ mem3 WRITE setMem3 NOTIFY mem3Changed)
public:
explicit Foo(QObject *parent = 0);
virtual ~Foo();
....
friend QDataStream& operator>>(QDataStream& in, Foo* v);
friend QDataStream& operator<<(QDataStream& out, const Foo* v);
private:

QString mem1;
QString mem2;
int mem3;

};
}
Q_DECLARE_METATYPE(GUI::Foo*)
我在var1、var2和var3中得到了正确的值

有人能告诉我我做错了什么,我该如何改正吗
提前感谢

通常不建议为指针定义数据流运算符。您应该创建用于序列化的数据结构,并使用反序列化结构手动创建QObject。在您的代码中,v应该为null,因为您的数据类是Foo*,并且它是在调用运算符>>之前构造的默认值,并且指针的默认值在Qt中为0。的可能重复
 QDataStream& operator<<(QDataStream& out, const Foo* v) {
 out << v->mem1 << v->mem2<< v->mem3;
 return out;
 }

 QDataStream& operator>>(QDataStream& in, Foo& v) {
 in >>v->mem1;
 in >>v->mem2;
 in >>v->mem3
 return in;
 }
qRegisterMetaTypeStreamOperators<GUI::Foo*>("GUI::Foo*");
GUI::Foo c1 ;
QSettings saver;
saver.setValue("test1",QVariant::fromValue(&c1));
QSettings loader;
QVariant value = loader.value("test1");
GUI::Foo* t = value.value<GUI::Foo*>();
 QDataStream& operator>>(QDataStream& in, Foo& v) {
 in >>v->mem1; <- here i am getting read access violation and v is showing to be null
 in >>v->mem2;
 in >>v->mem3
 return in;
 }
QDataStream& operator>>(QDataStream& in, Foo* v) {
QString var1;
QString var2;
int var3;
in >> var1;
in >> var2;
in >> var3;
return in;
}