Похоже, что это простое занятие, но по какой-то загадочной для меня причине не получается.
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)
Есть идеи почему?
замещать qreal
с QVariant
так что напишите что-то вроде этого:
QMetaObject::invokeMethod(flickable, "gotoXY",
Q_ARG(QVariant, pos.x()),
Q_ARG(QVariant, pos.y()));
Причина в том, что подобные аргументы JS интерпретируются как QVariant с QML. Javascript не является строго типизированным языком, поэтому нет прямого отображения между типами C ++ (даже зарегистрированными) и javascript как таковыми.
Других решений пока нет …