Receiving signals with arguments in QML from C++

From Qt Wiki
Revision as of 11:39, 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 &lt;QtGui&amp;gt;<br />#include &lt;QtDeclarative&amp;gt;

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 = &quot;The text&amp;quot;;<br /> triggerEvent(text);<br /> }<br />signals:<br /> void somethingHappened(QString text);<br />};
<br />#include &quot;main.moc&amp;quot;<br />int main(int argc, char'''* argv)<br />{<br /> QApplication app(argc, argv);<br /> qmlRegisterType&amp;lt;Person&amp;gt;(&quot;People&amp;quot;, 1, 0, &quot;Person&amp;quot;);<br /> QDeclarativeView view;<br /> view.setSource(QUrl::fromLocalFile&amp;amp;#40;&quot;main.qml&amp;quot;&amp;#41;);<br /> view.resize(200,100);<br /> view.show();<br /> return app.exec&amp;amp;#40;&amp;#41;;<br />}<br />


main.qml

import People 1.0
import QtQuick 1.0

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