不匹配“operator>>”(操作数类型为“QDataStream”和“QJsonObject”)
no match for ‘operator>>’ (operand types are ‘QDataStream’ and ‘QJsonObject’)
我在 Ubuntu Focal 上使用 Qt 5.12 时遇到此错误。但是,当我使用 Qt 5.13.2 及更高版本时,没有显示任何错误。我想让它在 5.12 及更低版本中运行,我应该怎么做才能实现?
TQProfile::TQProfile()
{
type = "abc";
abcSettings = ConfigHelper::generateAbcSettings();
}
QDataStream& operator << (QDataStream &out, const TQProfile &p)
{
out << p.type << p.abcSettings;
return out;
}
QDataStream& operator >> (QDataStream &in, TQProfile &p)
{
in >> p.type >> p.abcSettings;
return in;
}
struct TQProfile
{
TQProfile();
QString type;
QJsonObject abcSettings;
};
Q_DECLARE_METATYPE(TQProfile)
QDataStream& operator << (QDataStream &out, const TQProfile &p);
QDataStream& operator >> (QDataStream &in, TQProfile &p);
一个简单的解决方案是使用 QJsonDocument 将 QJsonObject 转换为 QByteArray:
QDataStream& operator << (QDataStream &out, const TQProfile &p)
{
QJsonDocument doc(p.abcSettings);
out << p.type << doc.toJson(QJsonDocument::Compact);
return out;
}
QDataStream& operator >> (QDataStream &in, TQProfile &p)
{
QByteArray data;
in >> p.type >> data;
p.abcSettings = QJsonDocument::fromJson(data).object();
return in;
}
我在 Ubuntu Focal 上使用 Qt 5.12 时遇到此错误。但是,当我使用 Qt 5.13.2 及更高版本时,没有显示任何错误。我想让它在 5.12 及更低版本中运行,我应该怎么做才能实现?
TQProfile::TQProfile()
{
type = "abc";
abcSettings = ConfigHelper::generateAbcSettings();
}
QDataStream& operator << (QDataStream &out, const TQProfile &p)
{
out << p.type << p.abcSettings;
return out;
}
QDataStream& operator >> (QDataStream &in, TQProfile &p)
{
in >> p.type >> p.abcSettings;
return in;
}
struct TQProfile
{
TQProfile();
QString type;
QJsonObject abcSettings;
};
Q_DECLARE_METATYPE(TQProfile)
QDataStream& operator << (QDataStream &out, const TQProfile &p);
QDataStream& operator >> (QDataStream &in, TQProfile &p);
一个简单的解决方案是使用 QJsonDocument 将 QJsonObject 转换为 QByteArray:
QDataStream& operator << (QDataStream &out, const TQProfile &p)
{
QJsonDocument doc(p.abcSettings);
out << p.type << doc.toJson(QJsonDocument::Compact);
return out;
}
QDataStream& operator >> (QDataStream &in, TQProfile &p)
{
QByteArray data;
in >> p.type >> data;
p.abcSettings = QJsonDocument::fromJson(data).object();
return in;
}