这看起来很简单,但是对于我来说有些神秘,原因却失败了。
Flickable {
objectName: "flickable"
function gotoXY(x, y) {
...
}
}
C++
QMetaObject::invokeMethod(flickable, "gotoXY", Q_ARG(qreal, pos.x()), Q_ARG(qreal, pos.y()));
flickable
是QObject*
,并且通过输出objectName
确实被确认为适当的对象。但是找不到该方法:QMetaObject::invokeMethod: No such method QQuickFlickable_QML_1::gotoXY(qreal,qreal)
有什么想法吗?
最佳答案
将qreal
替换为QVariant
,因此编写如下代码:
QMetaObject::invokeMethod(flickable, "gotoXY",
Q_ARG(QVariant, pos.x()),
Q_ARG(QVariant, pos.y()));
原因是这样的JS参数在QML中被解释为QVariant。 Javascript不是强类型语言,因此C++类型(即使已注册)和javascript之间也没有直接映射。
关于c++ - QMetaObject::invokeMethod无法调用QML/JS函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21026772/