How to Bind a QML property to a C++ Function/pt
Associando uma propriedade QML a uma função em C++
No momento o QtQuick não suporta um modo de ligar uma propriedade QML ao resultado de uma função em C++. No entanto, existe uma sugestão para adicionar suporte a este recurso aqui [bugreports.qt.nokia.com] .
Neste artigo, vamos mostrar como viabilizar a associação de propriedades QML e funções usando Q_PROPERTY [doc.qt.nokia.com] juntamente com o sinal NOTIFY [doc.qt.nokia.com] , que é emitido sempre que o valor da propriedade muda.
O Código em C++
Na classe Object no exemplo abaixo, nós criamos uma Q_PROPERTY que é usada para modificar e atualizar o texto do código QML e que tem um sinal changeOfStatus() que é emitido sempre que o status da função em C++ chamada function someFunction() mudar:
A função Object::getTheChange() modifica o texto de um item QML dependendo do resultado de Object::someFunction(). O resultado é usado como valor do texto da propriedade no código QML.
Object::someFunction() é chamado a partir do QML pois ele usa Q_INVOKABLE [doc.qt.nokia.com]. Ela simplesmente muda o status de uma variável membro, e é chamado a cada 5 segundos usando um QTimer [doc.qt.nokia.com] para ilustrar como a propriedade QML é capaz de reagir à mudança dessa. Ela pode também ser chamada a partir do código QML ao clicar no texto. Por fim, ela emite o sinal changeOfStatus() que aciona Object::getTheChange(), que deve ser chamado quando o texto deve ser reavaliado.
main.cpp
O Código QML
No código QML abaixo, nós criamos um Rectangle [doc.qt.nokia.com] que reage aos cliques do mouse. O texto é modificado através do resultado da função Object::theChange().
main.qml
Assim, usando a abordagem do exemplo acima, temos uma maneira de fazer com que propriedades QML reajam a mudanças internas no código C++.