Qt Quick Veröffentlichung
Verwenden Sie „ Qt Quick Controls “, um eine Anwendung zu erstellen, die Beiträge zu MQTT-Themen veröffentlichen kann.

Qt Quick „Veröffentlichung“ zeigt, wie man ` QMqttClient ` als QML-Typ registriert und in einer „ Qt Quick “-Anwendung verwendet.
Qt MQTT bietet in der aktuellen Version keine QML-API. Sie können jedoch die C++-Klassen des Moduls für QML verfügbar machen.
Erstellen eines Clients
Erstellen Sie die Wrapper-Klasse „ QmlMqttClient “, die „ QMqttClient “ als Mitglied enthält:
private:
Q_DISABLE_COPY(QmlMqttClient)
QMqttClient m_client;
};Verbinden Sie die Wrapper-Methoden im Konstruktor mit den Methoden von ` QMqttClient `:
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);
}Eine Wrapper-Methode hat denselben Namen wie die umhüllte Methode. Im einfachsten Fall handelt es sich lediglich um einen einzelnen Methodenaufruf:
void QmlMqttClient::connectToHost()
{
m_client.connectToHost();
}Es ist auch möglich, eine Wrapper-Methode anzupassen, indem man sie um zusätzliche Funktionen erweitert:
void QmlMqttClient::setPort(int newPort)
{
if (newPort < 0|| newPort > std::numeric_limits<quint16>::max()) {
qWarning() << "Trying to set invalid port number";
return;
}
m_client.setPort(static_cast<quint16>(newPort));Registrieren von Klassen in QML
Lade in der Datei „ main.cpp “ den QML-Typ „Main“ aus der Modulveröffentlichung:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QObject::connect(
&engine, &QQmlApplicationEngine::objectCreationFailed, &app,
[]() { QCoreApplication::exit(EXIT_FAILURE); }, Qt::QueuedConnection);
engine.loadFromModule(u"publication"_s, u"Main"_s);Verwenden Sie nun den Typ „MqttClient“ in der Datei „ Main.qml “, um einen MQTT-Client zu erstellen:
MqttClient {
id: client
hostname: hostnameField.text
port: portField.text
}Dateien:
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.