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