这是演示代码:
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/