Registering QMqttClient to QML and using it in a Qt Quick user interface.
Quick MQTT demonstrates how to register QMqttClient as a QML type and use it in a Qt Quick application.
Qt MQTT does not provide a QML API in its current version. However, you can make the C++ classes of the module available to QML.
We create a QmlMqttClient
class with the QMqttClient class as a base class:
QmlMqttClient::QmlMqttClient(QObject *parent) : QObject(parent) { connect(&m_client, &QMqttClient::hostnameChanged, this, &QmlMqttClient::hostnameChanged); connect(&m_client, &QMqttClient::portChanged, this, &QmlMqttClient::portChanged); connect(&m_client, &QMqttClient::stateChanged, this, &QmlMqttClient::stateChanged); }
We use the subscribe()
function to create a subscription object:
void QmlMqttClient::connectToHost() { m_client.connectToHost(); }
We connect to QMqttSubscription::messageReceived( ) to receive all messages sent to the broker:
void QmlMqttClient::disconnectFromHost() { m_client.disconnectFromHost(); }
We use an QMqttMessage object to store the payload of a received message:
void QmlMqttSubscription::handleMessage(const QMqttMessage &qmsg) { emit messageReceived(qmsg.payload()); }
In the main.cpp
file, we register the QmlMqttClient
class as a QML type, MqttClient:
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; qmlRegisterType<QmlMqttClient>("MqttClient", 1, 0, "MqttClient");
In addition, we register the QmlMqttSubscription
class as an uncreatable type:
qmlRegisterUncreatableType<QmlMqttSubscription>("MqttClient", 1, 0, "MqttSubscription", QLatin1String("Subscriptions are read-only"));
We can now use the MqttClient type in the main.qml
file to create an MQTT client:
MqttClient { id: client hostname: hostnameField.text port: portField.text }
Files:
As part of the free Business evaluation, we offer a free welcome call for companies, to talk about your requirements, and how the Felgo SDK & Services can help you. Just sign up and schedule your call.
Sign up now to start your free Business evaluation: