【问题标题】:QMetaObject::invokeMethod fails to invoke a QML/JS functionQMetaObject::invokeMethod 无法调用 QML/JS 函数
【发布时间】:2014-01-09 17:11:36
【问题描述】:

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

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)

有什么想法吗?

【问题讨论】:

  • 你试过 QVariant 而不是 qreal 吗?
  • @LaszloPapp - 这行得通,谢谢!我预计 qreal 会自动在 QML 中工作。

标签: c++ qt qml qtquick2 qtcore


【解决方案1】:

qreal替换为QVariant,所以写成这样:

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

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

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多