Receiving signals with arguments in QML from C++

From Qt Wiki
Revision as of 16:56, 3 March 2015 by AutoSpider (talk | contribs) (Add "cleanup" tag)
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Receiving signals with arguments in QML from C++

The example code below shows how you can receive signals with arguments in QML from C+. The important thing to notice in the example is that the signal's argument needs to be named identically in QML and in C+. So in this example it needs to be referred to as "text" both places, otherwise you will receive errors.

main.cpp

#include <QtGui>
#include <QtDeclarative>

class Person : public QObject
{
 Q_OBJECT
public:

Q_INVOKABLE void triggerEvent(QString text)
 {
 emit somethingHappened(text);
 }
 Person()
 {
 startTimer(1000);
 }
 void timerEvent(QTimerEvent '''e)
 {
 QString text = "The text";
 triggerEvent(text);
 }
signals:
 void somethingHappened(QString text);
};

#include "main.moc"
int main(int argc, char'''* argv)
{
 QApplication app(argc, argv);
 qmlRegisterType<Person>("People", 1, 0, "Person");
 QDeclarativeView view;
 view.setSource(QUrl::fromLocalFile("main.qml"));
 view.resize(200,100);
 view.show();
 return app.exec();
}

main.qml import People 1.0 import QtQuick 1.0

Person {

id: myPerson
onSomethingHappened: {
console.log(" something happened " +text);
}

}