【问题标题】:no match for ‘operator>>’ (operand types are ‘QDataStream’ and ‘QJsonObject’)“operator>>”不匹配(操作数类型为“QDataStream”和“QJsonObject”)
【发布时间】:2020-09-07 11:56:57
【问题描述】:

我在 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);

【问题讨论】:

    标签: c++ qt qt5 qt5.12


    【解决方案1】:

    一个简单的解决方案是使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      相关资源
      最近更新 更多