Я реализую HTML-оболочку в Qt, используя QWebChannel, и я вполне могу отправить строку, но я бы очень хотел отправить QJsonObject, Не строку json типа «{a: 1, b: 2}», а Qt QJsonObject. Является ли это возможным?
официальная документация гласит
«Не требуется ручная передача сообщений и сериализация данных».http://doc.qt.io/qt-5/qwebchannel.html
Как я могу испустить сигнал с JsonObject вместо строки?
Это мой связанный класс QWebChannel
class Mapa : public QObject{
Q_OBJECT
public:
explicit Mapa();
displayMessage(const QString &message);
signals:
updateText(const QString &text); // success :sends text
updateJson( const QJsonObject &json); // fail: sends null
updateJsond(const QJsonDocument &jsondoc);// fail: sends null
}
}
и вот мой основной код
Mapa map;
// setup the channel
QWebChannel channel;
QObject::connect(&clientWrapper, &WebSocketClientWrapper::clientConnected, &channel, &QWebChannel::connectTo);
// setup the dialog and publish it to the QWebChannel
channel.registerObject(QStringLiteral("map"), &map);
map.updateText("text");// sends "text" string
QJsonObject j;
j["Altitude"] = 10;
map.updateJson(j); // sends "null" string
QJsonDocument doc(j);
map.updateJsond(doc); // sends "null" string
Вместо использования QJson
семейные объекты, вы можете отправить QVariant
объекты к вашему коду Javascript
QJsonObject
знак равно QVariantMap
QJsonArray
знак равно QVariantList
Вы можете использовать .toVariantMap()
а также .toVariantList()
методы легко конвертировать ваши объекты из объектов JSON.
Других решений пока нет …