QMetaObject::invokeMethod falha ao invocar uma função QML/JS
Pergunta
Isso parece ser uma coisa simples de se fazer, mas por alguma razão misteriosa para mim falha.
Flickable {
objectName: "flickable"
function gotoXY(x, y) {
...
}
}
C++
QMetaObject::invokeMethod(flickable, "gotoXY", Q_ARG(qreal, pos.x()), Q_ARG(qreal, pos.y()));
flickable
é um QObject*
e é de fato verificado como sendo o objeto apropriado, exibindo seu objectName
.Mas o método não pode ser encontrado:
QMetaObject::invokeMethod: No such method QQuickFlickable_QML_1::gotoXY(qreal,qreal)
Alguma idéia do porquê?
Solução
Substituir qreal
com QVariant
, então escreva algo assim:
QMetaObject::invokeMethod(flickable, "gotoXY",
Q_ARG(QVariant, pos.x()),
Q_ARG(QVariant, pos.y()));
A razão é que argumentos JS como esse são interpretados como QVariant com QML.Javascript não é uma linguagem fortemente tipada, portanto não há mapeamento direto entre os tipos C++ (mesmo registrados) e o javascript como tal.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow