diff options
-rw-r--r-- | src/qml/jsapi/qjsvalue.cpp | 6 | ||||
-rw-r--r-- | tests/auto/qml/qjsvalue/tst_qjsvalue.cpp | 15 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp index fe388f3b52..5c246bf2fd 100644 --- a/src/qml/jsapi/qjsvalue.cpp +++ b/src/qml/jsapi/qjsvalue.cpp @@ -591,8 +591,10 @@ QVariant QJSValue::toVariant() const if (val.isString()) return QVariant(val.toQString()); - if (QV4::Managed *m = val.as<QV4::Managed>()) - return m->engine()->toVariant(val, /*typeHint*/ -1, /*createJSValueForObjects*/ false); + if (QV4::Managed *m = val.as<QV4::Managed>()) { + return m->engine()->toVariant(val, /*typeHint*/ -1, + /*createJSValueForObjects*/ val.isFunctionObject()); + } Q_ASSERT(false); return QVariant(); diff --git a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp index 0ae1fb6dfb..7f35282e89 100644 --- a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp +++ b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp @@ -1077,6 +1077,21 @@ void tst_QJSValue::toVariant() qInstallMessageHandler(handler); } + + // function + { + QJSValue func = eng.evaluate("(function() { return 5 + 5 })"); + QVERIFY(func.isCallable()); + QCOMPARE(func.call().toInt(), 10); + + QVariant funcVar = func.toVariant(); + QVERIFY(funcVar.isValid()); + QCOMPARE(funcVar.metaType(), QMetaType::fromType<QJSValue>()); + + QJSValue func2 = eng.toScriptValue(funcVar); + QVERIFY(func2.isCallable()); + QCOMPARE(func2.call().toInt(), 10); + } } void tst_QJSValue::toQObject_nonQObject_data() |