====== 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" ;
}