qt - 如何注册以下数据类型以允许序列化?

标签 qt qjson custom-data-type

我正在使用 QJson序列化 QObject - 派生类。我能够毫无问题地序列化类本身,但是当涉及到它的一个成员时,我遇到了一些麻烦。

该类名为 CProject它包含一个属性 files定义为:

QList<CProjectFile> files;

序列化 CProject 的实例时,我在控制台中收到一条消息:

QMetaProperty::read: Unable to handle unregistered datatype 'QList<CProjectFile>' for property 'CProject::files'



我在某处读到我必须注册数据类型,所以我在 CProject 的声明之后添加了以下内容:
Q_DECLARE_METATYPE(QList<CProjectFile>)

......当那什么也没做时,我补充说:
qRegisterMetaType< QList<CProjectFile> >();

没有任何工作。我究竟做错了什么?

最佳答案

我不知道 QJson 是如何工作的,但也许它需要流运算符。在声明 CProjectFile 类后尝试如下

class CProjectFile
{
   ...
};

    Q_DECLARE_METATYPE(CProjectFile)

    qRegisterMetaType<CProjectFile>("CProjectFile");//Do this if you need signal/slots

    qRegisterMetaTypeStreamOperators<QList<CProjectFile> >("CProjectFileList");

另见 QT Doc对于流操作符

关于qt - 如何注册以下数据类型以允许序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210877/

相关文章:

C - 数组中的结构(以及一大堆其他问题)

java - Spring Rest api 为什么在 Rest api 调用的响应中数据类型发生变化

haskell - 如何从元组到自定义数据类型?

qt - QProcess 在调用 QProcess.start() 后退出应用程序

c++ - TableWidget 不显示项目的更新值

qt - QJsonValue 的转换方法始终返回其默认值

c++ - Qjson获取对象名称

c++ - QJson用什么来解析JSON的语法?

c++ - 使用 QIODevice 的阻塞接口(interface)(QTcpSocket 和 QFile)时何时检查错误

c++ - QThread 中的 sleep 函数