QMetaObject :: invokeMethod не может вызвать функцию QML / JS

Похоже, что это простое занятие, но по какой-то загадочной для меня причине не получается.

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)

Есть идеи почему?

2

Решение

замещать qreal с QVariantтак что напишите что-то вроде этого:

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

Причина в том, что подобные аргументы JS интерпретируются как QVariant с QML. Javascript не является строго типизированным языком, поэтому нет прямого отображения между типами C ++ (даже зарегистрированными) и javascript как таковыми.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector