gpt4 book ai didi

javascript - 是否可以从 qml 访问 QScriptValue 中持有 QVariantMap 的任何内容?

转载 作者:行者123 更新时间:2023-11-28 06:40:39 28 4
gpt4 key购买 nike

您好,我想将 javascript 函数从 qml 传递给 c++ 代码,然后再调用它,但坚持使用 QScriptValue 持有 QVariantMap,它不想从 javascript 访问。我是否以正确的方式做所有事情,我可以在没有黑客的情况下做我想做的事吗?我正在使用 QtQuick1.1 和 Qt 5.5.0。

我有一个带有方法的 C++ 类:

void SomeClass::setQmlCallback(const QScriptValue &fn)
{
QScriptValue scriptFn = fn;
QScriptValueList args;

QVariantMap m;
m.insert(QStringLiteral("a"), 96);
m.insert(QStringLiteral("b"), 97);
args << scriptFn.engine()->newVariant(m); // To pass VariantMap to qml I wrap it in ScriptValue

scriptFn.call(scriptFn, args);
}

和一些 qml 代码:

onSomethingHappend: {
SomeClass.setQmlCallback(function(row) {
// console.log(row.a); // NotOk
// row's key `a` is undefined here
var convertedToVariant = SomeClass.convertToVariant(row);
console.log(convertedToVariant.a); // Ok
});
}

将 ScriptValue 显式转换为 Variant 的技巧:

QVariant SomeClass::convertToVariant(const QVariant &v)
{
return v;
}

此外,如果我将传递 QString 而不是 QVariantMap,一切都会起作用

最佳答案

我不知道为什么,但是将 QScriptEngine::newVariant 更改为 QScriptEngine::toScriptValue 解决了这个问题,因此我可以访问传递的 QVariantMap 作为 js 对象而无需 hack。

关于javascript - 是否可以从 qml 访问 QScriptValue 中持有 QVariantMap 的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035268/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com