Chapter 2: Connecting to C++ Methods and SignalsFiles:
Suppose we want PieChart to have a "clearChart()" method that erases the chart and then emits a "chartCleared" signal. Our app.qml would be able to call clearChart() and receive chartCleared() signals like this: import Charts 1.0 import QtQuick 1.0 Item { width: 300; height: 200 PieChart { id: aPieChart anchors.centerIn: parent width: 100; height: 100 color: "red" onChartCleared: console.log("The chart has been cleared") } MouseArea { anchors.fill: parent onClicked: aPieChart.clearChart() } Text { anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 } text: "Click anywhere to clear the chart" } } To do this, we add a clearChart() method and a chartCleared() signal to our C++ class: class PieChart : public QDeclarativeItem { ... public: ... Q_INVOKABLE void clearChart(); signals: void chartCleared(); ... }; The use of Q_INVOKABLE makes the clearChart() method available to the Qt Meta-Object system, and in turn, to QML. Note that it could have been declared as as a Qt slot instead of using Q_INVOKABLE, as slots are also callable from QML. Both of these approaches are valid. The clearChart() method simply changes the color to Qt::transparent, repaints the chart, then emits the chartCleared() signal: void PieChart::clearChart() { setColor(QColor(Qt::transparent)); update(); emit chartCleared(); } Now when we run the application and click the window, the pie chart disappears, and the application outputs: The chart has been cleared Try out the example yourself with the updated code in Qt's examples/tutorials/extending/chapter2-methods directory. © 2008-2011 Nokia Corporation and/or its subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. Privacy Policy Licensees holding valid Qt Commercial licenses may use this document in accordance with the Qt Commercial License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Nokia. Alternatively, this document may be used under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. |