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:尺寸类自定义不起作用

Xcode8 可以根据大小类自定义工具栏吗?

Symfony4加载类自定义文件夹时出错“预计找到类...但是找不到它”

类自定义排序的 C++ 向量

Qt 序列化自定义类