Как отправить QJsonObject с использованием QWebChannel в Qt

Я реализую 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

1 ответ

Решение

Вместо использования QJson семейные объекты, вы можете отправить QVariant объекты к вашему коду Javascript

  • QJsonObject знак равно QVariantMap
  • QJsonArrayзнак равно QVariantList

Вы можете использовать .toVariantMap() а также .toVariantList() методы легко конвертировать ваши объекты из объектов JSON.

Другие вопросы по тегам