QMetaObject :: invokeMethod无法调用QML / JS函数

时间:2014-01-09 17:11:36

标签: c++ qt qml qtquick2 qtcore

这看起来很简单,但对于我来说,一些神秘的理由失败了。

Flickable {
    objectName: "flickable"

    function gotoXY(x, y) {
        ...
    }
}

C ++

QMetaObject::invokeMethod(flickable, "gotoXY", Q_ARG(qreal, pos.x()), Q_ARG(qreal, pos.y()));

flickableQObject*,确实通过输出objectName来验证是合适的对象。但无法找到该方法:

QMetaObject::invokeMethod: No such method QQuickFlickable_QML_1::gotoXY(qreal,qreal)

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

qreal替换为QVariant,所以请写下这样的内容:

QMetaObject::invokeMethod(flickable, "gotoXY",
                          Q_ARG(QVariant, pos.x()),
                          Q_ARG(QVariant, pos.y()));

原因是像这样的JS参数被QML解释为QVariant。 Javascript不是强类型语言,因此C ++类型(甚至已注册)和javascript之间没有直接映射。