summaryrefslogtreecommitdiffstats
path: root/examples/mqtt/quicksubscription/Main.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/mqtt/quicksubscription/Main.qml')
-rw-r--r--examples/mqtt/quicksubscription/Main.qml155
1 files changed, 155 insertions, 0 deletions
diff --git a/examples/mqtt/quicksubscription/Main.qml b/examples/mqtt/quicksubscription/Main.qml
new file mode 100644
index 0000000..05f8920
--- /dev/null
+++ b/examples/mqtt/quicksubscription/Main.qml
@@ -0,0 +1,155 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 2.8
+import QtQuick.Window 2.2
+import QtQuick.Controls 2.1
+import QtQuick.Layouts 1.1
+
+Window {
+ visible: true
+ width: 640
+ height: 480
+ title: qsTr("Qt Quick MQTT Subscription Example")
+ id: root
+
+ property var tempSubscription: 0
+
+ MqttClient {
+ id: client
+ hostname: hostnameField.text
+ port: portField.text
+ }
+
+ ListModel {
+ id: messageModel
+ }
+
+ function addMessage(payload)
+ {
+ messageModel.insert(0, {"payload" : payload})
+
+ if (messageModel.count >= 100)
+ messageModel.remove(99)
+ }
+
+ GridLayout {
+ anchors.fill: parent
+ anchors.margins: 10
+ columns: 2
+
+ Label {
+ text: "Hostname:"
+ enabled: client.state === MqttClient.Disconnected
+ }
+
+ TextField {
+ id: hostnameField
+ Layout.fillWidth: true
+ text: "test.mosquitto.org"
+ placeholderText: "<Enter host running MQTT broker>"
+ enabled: client.state === MqttClient.Disconnected
+ }
+
+ Label {
+ text: "Port:"
+ enabled: client.state === MqttClient.Disconnected
+ }
+
+ TextField {
+ id: portField
+ Layout.fillWidth: true
+ text: "1883"
+ placeholderText: "<Port>"
+ inputMethodHints: Qt.ImhDigitsOnly
+ enabled: client.state === MqttClient.Disconnected
+ }
+
+ Button {
+ id: connectButton
+ Layout.columnSpan: 2
+ Layout.fillWidth: true
+ text: client.state === MqttClient.Connected ? "Disconnect" : "Connect"
+ onClicked: {
+ if (client.state === MqttClient.Connected) {
+ client.disconnectFromHost()
+ messageModel.clear()
+ tempSubscription.destroy()
+ tempSubscription = 0
+ } else
+ client.connectToHost()
+ }
+ }
+
+ RowLayout {
+ enabled: client.state === MqttClient.Connected
+ Layout.columnSpan: 2
+ Layout.fillWidth: true
+
+ Label {
+ text: "Topic:"
+ }
+
+ TextField {
+ id: subField
+ placeholderText: "<Subscription topic>"
+ Layout.fillWidth: true
+ enabled: tempSubscription === 0
+ }
+
+ Button {
+ id: subButton
+ text: "Subscribe"
+ visible: tempSubscription === 0
+ onClicked: {
+ if (subField.text.length === 0) {
+ console.log("No topic specified to subscribe to.")
+ return
+ }
+ tempSubscription = client.subscribe(subField.text)
+ tempSubscription.messageReceived.connect(addMessage)
+ }
+ }
+ }
+
+ ListView {
+ id: messageView
+ model: messageModel
+ height: 300
+ width: 200
+ Layout.columnSpan: 2
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ clip: true
+ delegate: Rectangle {
+ width: messageView.width
+ height: 30
+ color: index % 2 ? "#DDDDDD" : "#888888"
+ radius: 5
+ Text {
+ text: payload
+ anchors.centerIn: parent
+ }
+ }
+ }
+
+ Label {
+ function stateToString(value) {
+ if (value === 0)
+ return "Disconnected"
+ else if (value === 1)
+ return "Connecting"
+ else if (value === 2)
+ return "Connected"
+ else
+ return "Unknown"
+ }
+
+ Layout.columnSpan: 2
+ Layout.fillWidth: true
+ color: "#333333"
+ text: "Status:" + stateToString(client.state) + "(" + client.state + ")"
+ enabled: client.state === MqttClient.Connected
+ }
+ }
+}