no match for ‘operator>>’ (operand types are ‘QDataStream’ and ‘QJsonObject’)

622 Views Asked by At

I got this error when I using Qt 5.12 on Ubuntu Focal. However when I use Qt 5.13.2 and up, no error was shown. I want to get it work in 5.12 and lower, what should I to do achieve that?

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);
1

There are 1 best solutions below

0
On BEST ANSWER

A simple solution is to convert the QJsonObject to QByteArray using QJsonDocument:

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;
}