Como você usa o Q_INVOKABLE para acessar as funções do c ++ no QML?

1

Estou procurando o exemplo mais simples e direto.

De minha parte;

.h

public:
KTerminalDisplay(QQuickItem *parent = 0);
~KTerminalDisplay();
Q_INVOKABLE void setFontStyle(QString & s);  

.cpp

void KTerminalDisplay::setFontStyle(QString & s){
m_fontStyle = QString(s);
}

Isso funciona bem até agora. Sem problemas. A questão é; Como eu uso essa função em um arquivo QML?

    
por Akiva 22.09.2014 / 10:58

1 resposta

1

Para tornar a instância KTerminalDisplay acessível a partir do QML, você deve registrá-la no seu main.cpp . Como você espera que o pai seja um QQuickItem, sua pergunta não é tão simples. Depois de olhar para o aplicativo de terminal , posso propor o seguinte truque:

QQuickItem *item = view.rootObject();
KTerminalDisplay * display = (KTerminalDisplay *) item;
view.engine()->rootContext()->setContextProperty("kdisplay", display);

Uma vez cadastrado, você pode chamar setFontStyle do QML:

kdisplay.setFontStyle("foo")

Nota : Veja Incorporando objetos C ++ em QML com Context Properties , como você pode marcar seu método como um slot.

Fonte: link

    
por Sylvain Pineau 22.09.2014 / 11:13