c++ - 将 QList<T> 存储在 QVariant 中并流式传输到 QDataStream?

标签 c++ qt serialization

这是演示代码:

QList<Custom> L;
QVariant v(QVariant::fromValue(l));
QDataStream d;
d << v;

问题似乎是 d 不知道如何流式传输 v,因为 v 不知道如何在 L 上保存元类型。我已经将 Custom 和 L 注册为元类型,并且我还注册了它们的 IO流,但 L 没有元对象,我认为这就是问题所在。

我能以某种方式解决这个问题吗?

稍后编辑:
调试 QMetaType 代码后,我发现在调用 qRegisterMetaTypeStreamOperators<Type>("TypeString") 时“TypeString”必须是“Type”,而不仅仅是任何字符串。文档中提到了这一点,但并不是很清楚。 QtCentre 链接也提到了这一点。我决定接受 Kaleb Pederson 的回答,因为我很难找到答案是我的错。 :)

最佳答案

您需要register output operators对于给定的类型。另见 similar question on QtCentre .

这意味着您需要定义与 documentation 中定义的签名相匹配的非成员输出运算符。然后调用 qRegisterMetaTypeStreamOperators

关于c++ - 将 QList<T> 存储在 QVariant 中并流式传输到 QDataStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439508/

相关文章:

xml - 在 Android 上编写 XML

c++ - 将 Vector 元素分配给 char 变量

c++ - 如何在 visual studio c++ 中使用预编译的动态库?

c++ - 如何在此代码 C++ 中使用管道?

c++ - Qt和错误处理策略

c++ - 问题 : 2d Vector (nested Vector) with datatype of new class

serialization - 实际使用 Lua 协程/延续序列化来简化异步逻辑?

c++ - 下载前如何获取文件大小

c++ - Qt QVBoxLayout 的 addStretch 拉伸(stretch)占用了太多空间(来自布局)

django - 序列化模型时,如何告诉 Django 返回 ImageField.url (而不是相对路径)?