这看起来很简单,但是对于我来说有些神秘,原因却失败了。

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)

有什么想法吗?

最佳答案

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/

10-13 09:41