web-dev-qa-db-fra.com

Comment utilisez-vous Q_INVOKABLE pour accéder aux fonctions c ++ dans QML?

Je recherche l'exemple le plus simple et le plus direct.

De mon côté;

.h

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

.cpp

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

Cela fonctionne bien jusqu'à présent. Pas d'issues. La question est; comment utiliser cette fonction dans un fichier QML?

1
Akiva

Pour rendre l'instance KTerminalDisplay accessible à partir de QML, vous devez l'enregistrer dans votre main.cpp. Puisque vous vous attendez à ce que le parent soit un QQuickItem, votre question n'est pas si simple. Après avoir regardé le terminal app , je peux proposer l'astuce suivante:

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

Une fois inscrit, vous pouvez appeler setFontStyle depuis QML:

kdisplay.setFontStyle("foo")

Remarque : Voir Intégration d'objets C++ dans QML avec des propriétés de contexte car vous pouvez marquer votre méthode comme un emplacement.

Source: http://developer.nokia.com/community/wiki/Calling_Qt_class_methods_from_QML

1
Sylvain Pineau