История изменений
Исправление 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)))