Association d’un objet C++ au document principal QML
#include <QGuiApplication> Accède à la déclaration de la
#include <QQmlApplicationEngine> classe C++
#include <QQmlContext>
#include "maclasse.h"
Ajoute un objet C++ au Instancie un objet C++
int main(int argc, char *argv[]) contexte QML
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
[Link]()->setContextProperty("monObjet", new MaClasse());
[Link](QUrl(QStringLiteral("qrc:/[Link]")));
return [Link]();
}
Charge le document principal
QML dans l’application
Appel d’une méthode d’un objet C++ à partir de QML
maclasse.h [Link]
#ifndef MACLASSE_H Button {
#define MACLASSE_H id: btLire
text: "Lire"
#include <QObject> onClicked: {
#include <QString> if([Link]("a"))
{
class MaClasse : public QObject }
{ }
Q_OBJECT }
public:
explicit MaClasse(QObject *parent=nullptr);
virtual ~MaClasse();
Q_INVOKABLE bool lire(QString type, int nb=0); On peut appeler la méthode de
}; l’objet monObjet de type MaClasse
#endif // MACLASSE_H à partir de QML/JS.
Il est aussi possible d’appeler un
La méthode doit être déclarée avec slot.
Q_INVOKABLE dans une classe qui
hérite de QObject pour pouvoir
l’appeler à partir de QML
Déclarer une propriété C++ pour l’utiliser en QML
maclasse.h
#ifndef MACLASSE_H Une propriété est déclarée Q_PROPERTY()
#define MACLASSE_H dans une classe qui hérite de QObject.
#include <QObject>
#include <QString>
On peut exporter un attribut sous forme de
propriété Qt avec MEMBER. L'attribut sera
class MaClasse : public QObject accessible en lecture/écriture sans avoir
{ besoin d’accesseurs READ et WRITE.
Q_OBJECT
Q_PROPERTY(bool erreurConnexion MEMBER erreurConnexion NOTIFY erreurChanged)
Q_PROPERTY(QString moyenne READ getMoyenne NOTIFY moyenneUpdated)
public:
QString getMoyenne(); // accesseur
private: Il faut toujours spécifier un signal avec
bool erreurConnexion; NOTIFY pour autoriser la liaison de la
QString moyenne; propriété avec QML.
signals:
void erreurChanged(); On peut exporter un attribut sous forme
void moyenneUpdated(); de propriété Qt accessible seulement en
}; lecture avec l'accesseur READ sans
#endif // MACLASSE_H utiliser MEMBER.
Utiliser les signaux C++ et les propriétés dans QML
[Link]
void MaClasse::connecter() Émet un signal Qt
{
erreurConnexion = ..
emit erreurChanged();
}
void MaClasse::calculerMoyenne()
{
moyenne = ...;
emit moyenneUpdated();
}
L’élément Connections crée une
QString MaClasse::getMoyenne()
connexion aux signaux de Qt.
{ [Link]
return moyenne;
} Connections { L’objet Qt qui émet le signal
target: monObjet
onMoyenneUpdated: {
[Link]("Moyenne : " + [Link]);
}
onErreurChanged: {
Il est aussi possible ce créer un [Link]("Erreur : " + [Link]);
signal dans QML et de le connecter à }
un slot C++ (voir Cours QML). }
Les signaux Qt sont Accès à la propriété
préfixés par on : onSignal C++ d’un objet.