How to Bind a QML property to a C++ Function/pt

From Qt Wiki
Revision as of 15:41, 14 January 2015 by Maintenance script (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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++.

Categories: