====== Eseguire funzioni (metodi) C++ dal codice Qml ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//01/12/2017 - 10:09//** \\ \\ In questo breve esempio andremo a vedere come eseguire metodi c++ dal codice Qml. Nell'esempio che segue andremo a visualizzare un messaggio in console al click di un button. \\ La tecnica usata consiste nel creare una classe derivata da QObject (di nome pobtype) e in seguito esporla al qml tramite l'oggetto "engine" puntatore all'app qml. Ho creato la classe pobtype con l'autocomposizione di qtcreator , da aggiungi nuovo classe c++, specificando che deriva da QObject. \\ Alla fine tutto quello che dovremo fare è richiamare il nostro metodo della classe direttamente da qml: //Questo metodo è nel codice C++ mypob.test() Di seguito il codice completo e commentato nelle parti salienti: **main.qml** import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") MouseArea { anchors.fill: parent Button { id: button0 x: 353 y: 94 text: qsTr("Button") onClicked: { //Questo metodo è nel codice C++ mypob.test() } } } } **main.cpp** #include #include #include "pobtype.h" //la mia classe #include //header necessari int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); //L'oggetto "mypob" sara' cosi' visibile dal qml col nome di "mypob" QScopedPointermypob (new pobType); engine.rootContext()->setContextProperty("mypob",mypob.data()); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } **pobtype.h** #ifndef POBTYPE_H #define POBTYPE_H #include class pobType : public QObject { Q_OBJECT public: explicit pobType(QObject *parent = nullptr); Q_INVOKABLE void test(); signals: public slots: }; #endif // POBTYPE_H **pobtype.cpp** #include "pobtype.h" #include pobType::pobType(QObject *parent) : QObject(parent) { } Q_INVOKABLE void pobType::test() { qDebug()<<"Cliccato! \n" ; }