diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2016-07-07 16:15:02 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2016-07-14 10:44:54 +0000 |
commit | 2f2e31fea77aef558e5c6e3727f9b31cf018599a (patch) | |
tree | fccaf846d3c8c0f5e9287ccbb92caafd2c73a374 /examples | |
parent | 7b94a6394ed744c1132a679ac699231b097f416d (diff) |
Better connection mechanism for events
The connectToEvent() mechanism is analogous to connectToState() and
allows arbitrary event specifications, with '.' and '*'. In addition
a QML component is provided to make event connections available in QML.
Change-Id: Ie45422481a794b1b350347c383318857e5dc3f6d
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/scxml/calculator-qml/calculator-qml.qml | 7 | ||||
-rw-r--r-- | examples/scxml/calculator-widgets/mainwindow.cpp | 8 | ||||
-rw-r--r-- | examples/scxml/pinball/mainwindow.cpp | 9 |
3 files changed, 8 insertions, 16 deletions
diff --git a/examples/scxml/calculator-qml/calculator-qml.qml b/examples/scxml/calculator-qml/calculator-qml.qml index 846589f..9d679f6 100644 --- a/examples/scxml/calculator-qml/calculator-qml.qml +++ b/examples/scxml/calculator-qml/calculator-qml.qml @@ -51,6 +51,7 @@ import CalculatorStateMachine 1.0 import QtQuick 2.5 import QtQuick.Window 2.0 +import QtScxml 5.7 Window { id: window @@ -61,9 +62,9 @@ Window { CalculatorStateMachine { id: statemachine running: true - onEventOccurred: { - if (event.name === "updateDisplay") - resultText.text = event.data.display; + property var connection: EventConnection { + events: ["updateDisplay"] + onOccurred: resultText.text = event.data.display } } diff --git a/examples/scxml/calculator-widgets/mainwindow.cpp b/examples/scxml/calculator-widgets/mainwindow.cpp index eacafaa..d8c77f7 100644 --- a/examples/scxml/calculator-widgets/mainwindow.cpp +++ b/examples/scxml/calculator-widgets/mainwindow.cpp @@ -115,11 +115,9 @@ MainWindow::MainWindow(QScxmlStateMachine *machine, QWidget *parent) : m_machine->submitEvent("C"); }); - connect(m_machine, &QScxmlStateMachine::eventOccurred, [this](const QScxmlEvent &event) { - if (event.name() == QLatin1String("updateDisplay")) { - const QString display = event.data().toMap().value("display").toString(); - ui->display->setText(display); - } + m_machine->connectToEvent(QLatin1String("updateDisplay"), this, [this](const QScxmlEvent &event) { + const QString display = event.data().toMap().value("display").toString(); + ui->display->setText(display); }); } diff --git a/examples/scxml/pinball/mainwindow.cpp b/examples/scxml/pinball/mainwindow.cpp index 9e525c2..1e7b13c 100644 --- a/examples/scxml/pinball/mainwindow.cpp +++ b/examples/scxml/pinball/mainwindow.cpp @@ -89,8 +89,7 @@ MainWindow::MainWindow(Pinball *machine, QWidget *parent) : initAndConnect(QLatin1String("onState"), m_ui->ballOutButton); // datamodel update - connect(m_machine, SIGNAL(eventOccurred(const QScxmlEvent &)), - this, SLOT(eventOccurred(const QScxmlEvent &))); + m_machine->connectToEvent("updateScore", this, &MainWindow::eventOccurred); // gui interaction connect(m_ui->cButton, &QAbstractButton::clicked, @@ -129,12 +128,6 @@ void MainWindow::initAndConnect(const QString &state, QWidget *widget) void MainWindow::eventOccurred(const QScxmlEvent &event) { - if (event.originType() != QLatin1String("qt:signal")) - return; - - if (event.name() != QLatin1String("updateScore")) - return; - const QVariant data = event.data(); const QString highScore = data.toMap().value("highScore").toString(); m_ui->highScoreLabel->setText(highScore); |