Receiving signals with arguments in QML from C++

From Qt Wiki
Revision as of 14:51, 24 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


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

<br />#include <QtGui><br />#include <QtDeclarative>

class Person : public QObject<br />{<br /> Q_OBJECT<br />public:

Q_INVOKABLE void triggerEvent(QString text)<br /> {<br /> emit somethingHappened(text);<br /> }<br /> Person()<br /> {<br /> startTimer(1000);<br /> }<br /> void timerEvent(QTimerEvent '''e)<br /> {<br /> QString text = "The text";<br /> triggerEvent(text);<br /> }<br />signals:<br /> void somethingHappened(QString text);<br />};
<br />#include "main.moc"<br />int main(int argc, char'''* argv)<br />{<br /> QApplication app(argc, argv);<br /> qmlRegisterType<Person>("People", 1, 0, "Person");<br /> QDeclarativeView view;<br /> view.setSource(QUrl::fromLocalFile("main.qml"));<br /> view.resize(200,100);<br /> view.show();<br /> return app.exec();<br />}<br />


main.qml

import People 1.0
import QtQuick 1.0

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