这看起来很简单,但对于我来说,一些神秘的理由失败了。
Flickable {
objectName: "flickable"
function gotoXY(x, y) {
...
}
}
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)
任何想法为什么?
答案 0 :(得分:1)
将qreal
替换为QVariant
,所以请写下这样的内容:
QMetaObject::invokeMethod(flickable, "gotoXY",
Q_ARG(QVariant, pos.x()),
Q_ARG(QVariant, pos.y()));
原因是像这样的JS参数被QML解释为QVariant。 Javascript不是强类型语言,因此C ++类型(甚至已注册)和javascript之间没有直接映射。