/home/huasonic/QtWorks/LevelServelJson/LevelServelJson/MqttServer.cpp:149: error: 'class QByteArray' has no member named 'toUtf8'; did you mean 'toUInt'? QJsonDocument jsonDoc = QJsonDocument::fromJson(msg.payload().toUtf8()); ^~~~~~ toUInt
时间: 2024-02-10 13:06:45 浏览: 153
这个错误提示是因为QByteArray类没有toUtf8()方法,可能是因为你的Qt版本较低。
解决方法是使用QByteArray的data()方法获取其char*类型的数据,然后使用QString的fromUtf8()方法将其转换为QString类型,最后再使用QJsonDocument::fromJson()方法解析JSON数据。修改后的代码如下:
```cpp
#include <QJsonDocument>
#include <QJsonObject>
// JSON数据
QByteArray payloadData = msg.payload();
QString payloadStr = QString::fromUtf8(payloadData.data(), payloadData.size());
QJsonDocument jsonDoc = QJsonDocument::fromJson(payloadStr.toUtf8());
QJsonObject jsonObj = jsonDoc.object();
// 获取数据
QString value1 = jsonObj.value("value_1").toString();
QString currentTime = jsonObj.value("current_time").toString();
QString imce = jsonObj.value("imce").toString();
```
在这个例子中,我们首先使用QByteArray的data()方法获取其char*类型的数据,然后使用QString的fromUtf8()方法将其转换为QString类型。接着,我们可以使用QJsonDocument::fromJson()方法将QString类型的JSON数据转换为QJsonDocument对象,再使用QJsonDocument::object()方法将其转换为QJsonObject对象。接下来的步骤和之前的例子一样,可以使用QJsonObject::value()方法获取JSON数据中的值。
需要注意的是,由于QByteArray的数据可能包含NULL字符,因此使用其data()方法获取的char*类型的数据不一定是以NULL结尾的,需要指定其大小。
阅读全文