Connecter l'event d'un bouton QML à une méthode C++
Connecter un objet c++ à l'UI
Pour utiliser les méthodes d'une class c++ via QML QtQuick il faut passer l'objet via le root context.
Exemple avec une simple class hello
class Hello: public QObject
{
Q_OBJECT
private:
QString m_name;
public:
Hello(const QString& name): m_name(name){}
Q_INVOKABLE QString getName(){return m_name;}
};
Notez bien la macro Q_INVOKABLE devant la getName, qui permet de signifier au qml que c'est une méthode.
Puis dans le main on "instancie" l'objet hello, et on le passe via le context
QQmlApplicationEngine engine;
QQmlContext *ctx = engine.rootContext();
Hello person("Jeannot");
ctx->setContextProperty(QStringLiteral("person"), &person);
Ensuite avec le Qml il suffit d'appeler simplement la méthode via l'objet !
Button {
id: button_s
text: qsTr("Test connexion c++...")
MessageDialog {
id: messageDialog
title: "Hey"
text: "..."
onAccepted: {
console.log("MessageDialog OK.")
}
}
onClicked: {
messageDialog.text = qsTr( "Bonjour " + person.getName() )
messageDialog.open();
}
}
Afficher un objet type QString dans l'UI
De la même manière que ci-dessus, pour afficher un QString via QtQuick une méthode simple est de passer l'objet via le context
QQmlApplicationEngine engine;
QQmlContext *ctx = engine.rootContext();
QString Device_Name = QSysInfo::machineHostName() +" "+ QSysInfo::prettyProductName() +" "+ QSysInfo::productVersion() ;
ctx->setContextProperty(QStringLiteral("m_deviceName"), Device_Name);
Puis dans le Qml
Button {
id: button_s
text: qsTr("Test connexion c++...")
MessageDialog {
id: messageDialog
title: "Hey"
text: "..."
onAccepted: {
console.log("MessageDialog OK.")
}
}
onClicked: {
messageDialog.text = qsTr( m_deviceName )
messageDialog.open();
}
}