Bonjour,
Je souhaite développer une application graphique en Qt 5 visant à créer une liste d'éléments en C++ et à afficher celle ci en QML.
J'ai suivi la doc "Exposing Attributes of C++ Types to QML" du site qt-project.org, mais j'ai un soucis au niveau de la déclaration de la vue.
Je m'explique, j'en suis au stade où je souhaite simplement exposer au QML un seul objet, et non toute une liste.
J'ai créé ma classe message, mon main et ma fenêtre qml :
message.h
main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #ifndef MESSAGE_H #define MESSAGE_H #include <QObject> class Message : public QObject { Q_OBJECT Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged) public: Message(QString const& msg="") : m_author(msg) {} void setAuthor(const QString &a) { if (a != m_author) { m_author = a; emit authorChanged(); } } QString author() const { return m_author; } signals: void authorChanged(); private: QString m_author; }; #endif // MESSAGE_H
main.qml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <QtGui/QGuiApplication> #include "qtquick2applicationviewer.h" #include "message.h" #include <QQmlContext> #include <QQmlEngine> #include <QQmlComponent> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); Message msg("Toto"); QQmlEngine engine; engine.rootContext()->setContextProperty("message", &msg); QQmlComponent component(&engine, QUrl::fromLocalFile("main.qml")); component.create(); return app.exec(); }
Ces trois fichiers sont les même que ceux exposés dans la doc, mais à l'exécution ça ne marche pas ! A la compilation QQmlComponent: Component is not ready s'affiche et ma fenêtre ne s'ouvre pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import QtQuick 2.0 Rectangle { width: 360 height: 360 Text { text: message.author anchors.centerIn: parent } }
Ce que je ne comprends pas c'est qu'en utilisant la méthode suivante dans le main.cpp :
Tout marche très bien !!! Je cherche donc à comprendre la différence entre ces deux méthodes, et pourquoi celle qui est dans la doc officielle ne marche pas... Il doit s'en doute me manquer quelque chose, mais après de nombreux essais je ne trouve pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include <QtGui/QGuiApplication> #include "qtquick2applicationviewer.h" #include "message.h" #include <QQmlContext> #include <QQmlEngine> #include <QQmlComponent> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); Message msg("Toto"); QtQuick2ApplicationViewer viewer; viewer.rootContext()->setContextProperty("message", &msg); viewer.setMainQmlFile(QStringLiteral("qml/TestQt5Quick2/main.qml")); viewer.showExpanded(); return app.exec(); }
Merci d'avance !
Partager