Calling c++ function from qml
-
It actually is easy.
Please don't get me wrong - but I have told you for the third time now how it is supposed to be done and how to circumvent the need of including generated files and I still sense that you do not even properly read what I write.
@
// testclass.hclass TestClass : public QObject
{
Q_OBJECTpublic:
TestClass(QObject *parent = 0);Q_INVOKABLE QString returnString();
};
// testclass.cpp
TestClass::TestClass(QObject *parent) : QObject(parent)
{
}QString TestClass::returnString()
{
return "string";
}// main.cpp
int main(int argc, char *argv[])
{
QApplication application(argc, argv);QDeclarativeView view; view.rootContext()->setContextProperty("TestClass", new TestClass(&view)); view.setSource(QUrl::fromLocalFile("Test.qml")); view.show(); return application.exec();
}
// Test.qml
import QtQuick 1.1
Text {
text: TestClass.returnString()
}
@ -
Hey guys,
I´m having exactly the same problem, but I think some of the Classes and Libraries have changed. The way Lukas explained this makes a lot of sense to me, but the code doesn´t work for me. I´m using Qt 5.3 with QtQuick 2.2 .
I would be very thankful if someone could look at my code, as I´m desperate at the moment.My goal is to write a String into an xml-file.
the c++function should be called from qml.Thanks in advance
@
//header.h
class TestClass : public QObject
{
Q_OBJECTpublic:
TestClass(QObject *parent = 0);Q_INVOKABLE void writeXml(QString &text){ }
};@
TestClass::TestClass(QObject *parent) : QObject(parent)
{
}void TestClass::writeXml(QString text)
{QString filename = "C:/Qt5/Tools/QtCreator/bin/CPPTEST2/example.xml"; QFile file(filename); if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); stream << text << endl; } file.close();
}@
@
//main.cpp
{
QGuiApplication app(argc, argv);QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); QQuickView *view = new QQuickView; view->setSource(QUrl::fromLocalFile("qrc:///main.qml")); view->show(); return app.exec();
}
@
@ //main.qml
import QtQuick 2.2
import QtQuick.Window 2.1Window {
visible: true
width: 360
height: 360MouseArea { anchors.fill: parent onClicked: { TestClass.writeXml("Hello World"); } }
}@
-
Hi mathiii
this is not how it works.
You have to create a C++ object first.
Than make the object for QML visible.
Now you can access the object.Check out the following link.
It describes every C++/QML interaction:
http://qt-project.org/wiki/Introduction_to_Qt_Quick_for_Cpp_developers#e70ea8482b12de725ec779f1bc55c92cBest regards