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ê?

Foi útil?

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
scroll top