Javascript 如何从C++;

Javascript 如何从C++;,javascript,c++,qt,qml,Javascript,C++,Qt,Qml,我正在尝试调用QML中的函数: function resetSomething() { tempVar= undefined } 我不知道如何为这个函数编写invokeMethod。 我试着用这样的方法: QQuickItem* qObj= findChild<QQuickItem>("temp"); if (qObj) { QVariant returnArg; QMetaObject::invokeMethod(qObj, "resetSomething

我正在尝试调用QML中的函数:

function resetSomething() {
    tempVar= undefined
}
我不知道如何为这个函数编写invokeMethod。 我试着用这样的方法:

QQuickItem* qObj= findChild<QQuickItem>("temp");
if (qObj)
{
    QVariant returnArg;
    QMetaObject::invokeMethod(qObj, "resetSomething",Q_RETURN_ARG,QVariant,returnArg));
}
QQuickItem*qObj=findChild(“temp”);
if(qObj)
{
qarg;
QMetaObject::invokeMethod(qObj,“resetSomething”,Q_RETURN_ARG,QVariant,returnArg));
}
但它给出了错误

找不到匹配的函数resetSomething(QVariant)


正如您在错误消息中看到的,Qt的元对象系统正在尝试查找方法resetSomething(QVariant),但您的方法没有任何参数。我猜这是因为错误的Q\u RETURN\u ARG宏用法。
看起来你可以这样简单地修复它:

QVariant returnArg;
QMetaObject::invokeMethod(qObj, "resetSomething", Qt::DirectConnection,
                          Q_RETURN_ARG(QVariant, returnArg));
我还建议你去读官方的,它是辉煌的


顺便说一句:来自谷歌,有大量的C++/JavaScript交流。你可以在那里找到很多有用的模式

这里的
temp
是什么?该功能是否与此对象相关?请发布所有相关代码。似乎您在Q_RETURN_ARG之后丢失了“(”符号。请尝试以下一种方式调用函数:
QMetaObject::invokeMethod(qObj,“resetSomething”,Q_RETURN_ARG(QVariant,returnArg));
QMetaObject::invokeMethod(qObj,“resetSomething”,Qt::QueuedConnection)
应该足够了。我一时兴起删除了我以前的注释,但它确实是正确的。当你不关心结果并且没有参数时,在我看来这是最短的方法。谢谢!!这很有效,QMetaObject::invokeMethod(qObj,“resetSomething”,Qt::QueuedConnection)在QML方面调用一个函数,它会创建一个依赖于C++到QML的依赖关系,限制了你在QML方面的灵活性。