Qt 序列化自定义类
Posted
技术标签:
【中文标题】Qt 序列化自定义类【英文标题】:Qt Serializion custom class 【发布时间】:2015-01-26 15:01:09 【问题描述】:我的代码有什么问题!!!!我收到以下错误消息: 未解析的外部符号。 任何建议..以及从 QObject 继承的正确方法是什么,而不是让您尝试访问私有成员。
namespace BioQt
class Location : public QObject
Q_OBJECT
public:
explicit Location(QObject *parent );
;
QDataStream &operator<<(QDataStream &out, const Location &obj);
QDataStream &operator>>(QDataStream &in, Location &obj);
Q_DECLARE_TYPEINFO(BioQt::Location, Q_PRIMITIVE_TYPE);
#endif
这是我的 cpp 文件
namespace BioQt
Location::Location(QObject *parent)
: QObject(parent)
QDataStream &operator<<(QDataStream &ds, const Location &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, Location &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;
// namespace BioQt
【问题讨论】:
这似乎有几处错误,但首先要发布确切的错误消息。 提到几个错误之一:) 即使我将 o 或 null 传递给父级,我也得到了同样的错误... 您的流声明使用双 & 符号,这是 C++11 中的通用引用,与定义不匹配。您将类声明为原始类型,但显然不是。您在BioQt
命名空间内定义流运算符,而不是完全限定参数类型。现在发布确切的错误消息。
这是错误信息 :Location.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BioQt::Location::metaObject(void)const" ( ?metaObject@Location@BioQt@@UBEPBUQMetaObject@@XZ)
声明使用双与号:我更正了帖子,我的代码复制过去的问题中没有双与号:)
【参考方案1】:
我成功地使用 Qt 5.4.0 vs2010 x86 进行了编译,没有出现任何错误。回到 Qt 4.7 的日子,我记得类似的东西,将正文移动到头文件并使用 inline 为我工作,我记得。
【讨论】:
没关系,通过删除调试目录解决了问题以上是关于Qt 序列化自定义类的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCell 中的 NSLayoutConstraint:尺寸类自定义不起作用