当QDataStream没有这样的方法时,为什么可以将QVariant写入QDataStream?

时间:2014-11-09 03:36:18

标签: c++ qt qdatastream

我可以将QVariant写入QDataStream并从QDataStream中读取QVariant而不会出现问题。

QByteArray byteArray;

QDataStream outStream(&byteArray, QIODevice::WriteOnly);
QVariant outVar(QString("hello"));
outStream << outVar;

QVariant inVar;
QDataStream inStream(&byteArray, QIODevice::ReadOnly);
inStream >> inVar;

我的问题是,当QDataStream没有方法operator<<(QVariant v)时,上面的代码如何编译并正常工作?

1 个答案:

答案 0 :(得分:2)

因为operator<<是在QVariant中声明的。

根据QDataStream

  

除了此处记录的重载流操作符之外,您可能希望序列化到QDataStream的任何Qt类都将具有声明为该类非成员的适当流操作符。

在QVariant的源代码中,您可以找到两个非成员函数(遗憾的是,它们没有列在QVariant的文档中):

QDataStream& operator<<(QDataStream &s, const QVariant &p)
QDataStream& operator>>(QDataStream &s, QVariant &p)