QJson :: fromVariant()在第8个字节之后切断了所有内容

时间:2016-11-27 19:59:11

标签: c++ json qt

我有以下代码块作为Qt应用程序的一部分:

if(query.exec(UeQueries::UeTablePlaces::SQL_QUERY_GET_ALL_PLACES))
{
    QJsonDocument jsonDocument;
    QJsonArray jsonArray;
    QJsonObject jsonObject;

    while(query.next())
    {
        for(int fieldIndex=0; fieldIndex<query.record().count(); fieldIndex++)
        {
            QString fieldName=query.record().fieldName(fieldIndex);

            if(fieldName.contains("IMAGE"))
            {
                qDebug() << Q_FUNC_INFO
                         << query.value(fieldIndex);

                jsonObject.insert(query.record().fieldName(fieldIndex),
                                  QJsonValue::fromVariant(QVariant(query.value(fieldIndex))));
            }
            else
            {
                jsonObject.insert(query.record().fieldName(fieldIndex),
                                  QJsonValue::fromVariant(query.value(fieldIndex)));
            }   // if

            qDebug() << Q_FUNC_INFO
                     << jsonObject[query.record().fieldName(fieldIndex)];
                     /*<< jsonObject.value(query.record().fieldName(fieldIndex));*/
        }   // for

        jsonArray.push_back(jsonObject);
    }   // while

    jsonDocument.setArray(jsonArray);

    fetchedData=jsonDocument.toJson();
}
else
{
    emit this->ueSignalQueryError(query.lastError());
}   // if

此代码的目的是将MySql个查询结果转换为QJsonDocument,然后通过TCP/IP服务器发送到客户端应用程序。特定的MySql查询是:

static const QString SQL_QUERY_GET_ALL_PLACES="SELECT P.ID AS PLACE_ID, P.NAME AS PLACE_NAME, P.X AS PLACE_X, P.Y AS PLACE_Y, F.NAME AS FLOOR_NAME, F.IMAGE AS FLOOR_IMAGE FROM PLACES AS P JOIN FLOORS AS F ON P.FLOOR=F.ID";

现在,问题是FLOOR_IMAGE字段基本上是MEDIUMBLOB类型,它以正确的方式保存[PNG Image] [3],因为代码的第一个qDebug()语句显示MEDIUMBLOB字段FLOOR_IMAGE整个二进制表示(如数据库中),但声明
 QJsonValue::fromVariant(QVariant(query.value(fieldIndex)))
8th byte

之后切割所有内容的方式破坏数据
virtual void UeTask::run() QJsonValue(string, "�PNG\r\n\u001A\n")

输出第二个qDebug()语句。为什么会这样?

0 个答案:

没有答案