2

QWebChannel を使用して Qt に HTML ラッパーを実装していますが、文字列を送信することはできますが、「{a:1,b:2}」のような json 文字列ではなく、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
4

1 に答える 1

5

QJsonファミリ オブジェクトを使用する代わりに、QVariantオブジェクトを Javascript コードに送信できます。

  • QJsonObject=QVariantMap
  • QJsonArray=QVariantList

.toVariantMap()メソッドとメソッドを使用して.toVariantList()、オブジェクトを JSON オブジェクトから簡単に変換できます。

于 2016-03-03T16:15:51.473 に答える