我有以下代码块作为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()
语句。为什么会这样?