LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

 Q_INVOKABLE void ourMethod(QJSValue jsVal) const {
        qDebug() << Q_FUNC_INFO << "Слот ourMethod()";

        qDebug() << "Результат isObject(): "  << jsVal.isObject();
        qDebug() << "Результат isQObject(): " << jsVal.isQObject();
        qDebug() << "Результат isArray(): "   << jsVal.isArray();
        qDebug() << "Результат isVariant(): " << jsVal.isVariant();

        qDebug() << "QJSValue содержит тип " << jsVal.toVariant().userType();
        qDebug() << "Тип QVariant "     << qMetaTypeId<QVariant>();
        qDebug() << "Тип QVariantList " << qMetaTypeId<QVariantList>();
        qDebug() << "Тип QVariantMap "  << qMetaTypeId<QVariantMap>();
        qDebug() << "Тип QJSValue: "    << qMetaTypeId<QJSValue>();

        QVariantMap map=jsVal.toVariant().toMap();
        qDebug() << map;

    }

Метод сам по себе норм, и документация верная, это приводится к QVariantMap.

Но в js коде ошибка.

Надо так:

var a = {};
a["one"] = 1;
a["two"] = 2;

ourExemplar.ourMethod(a);

Так как при просто var a; значение a будет undefined, типа nullptr если переводить на С++.

qDebug() << map; выводит у меня:

QMap(("one", QVariant(int, 1))("two", QVariant(int, 2)))

Исходная версия fsb4000, :

 Q_INVOKABLE void ourMethod(QJSValue jsVal) const {
        qDebug() << Q_FUNC_INFO << "Слот ourMethod()";

        qDebug() << "Результат isObject(): "  << jsVal.isObject();
        qDebug() << "Результат isQObject(): " << jsVal.isQObject();
        qDebug() << "Результат isArray(): "   << jsVal.isArray();
        qDebug() << "Результат isVariant(): " << jsVal.isVariant();

        qDebug() << "QJSValue содержит тип " << jsVal.toVariant().userType();
        qDebug() << "Тип QVariant "     << qMetaTypeId<QVariant>();
        qDebug() << "Тип QVariantList " << qMetaTypeId<QVariantList>();
        qDebug() << "Тип QVariantMap "  << qMetaTypeId<QVariantMap>();
        qDebug() << "Тип QJSValue: "    << qMetaTypeId<QJSValue>();

        QVariantMap map=jsVal.toVariant().toMap();
        qDebug() << map;

    }

Метод сам по себе норм, и документация верная, это приводится к QVariantMap.

Но в js коде ошибка.

Надо так:

var a = {};
a["one"] = 1;
a["two"] = 2;

ourExemplar.ourMethod(a);

Так как var a; это a = undefined, типа nullptr по С++.

qDebug() << map; выводит у меня:

QMap(("one", QVariant(int, 1))("two", QVariant(int, 2)))