gpt4 book ai didi

c++ - 如何使用 GitHub Project MosQtitto 中的 MqttClientSingletonClass?

转载 作者:行者123 更新时间:2023-11-30 05:09:21 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 Alepez 的 GitHub 项目 MosQtitto 实现多个 MqttClient。

https://github.com/alepez/MosQtitto

用MqttClient类创建了一个Client,但不知道如何在main.qml(项目中的App.qml)中使用MqttClientSingleton类创建多个Client。

MqttClientSingleton.hpp

    #ifndef MQTTCLIENTSINGLETON_HPP
#define MQTTCLIENTSINGLETON_HPP

#include "MqttClient.hpp"

class MqttClientSingleton {
public:
static MqttClient* get();
static void set(MqttClient*);
};

#endif // MQTTCLIENTSINGLETON_HPP

MqttClientSingleton.cpp

    #include "MqttClientSingleton.hpp"
#include <QDebug>

static MqttClient* instance{nullptr};

MqttClient* MqttClientSingleton::get() {
return instance;
}

void MqttClientSingleton::set(MqttClient* newInstance) {
instance = newInstance;
}

我认为类必须注册

qmlRegisterSingletonType

在 main.qml 中使用它。有人知道如何注册它以及如何使用它实现多个客户端吗?

最佳答案

我是 MosQtitto 的作者。 MqttClient 是您需要多个实例时使用的正确类。 MqttClientSingleton 存在只有一个实例(和一个 tcp 连接)同时在 qml 和 c++ 中使用。

只有当你需要一个单一的实例,在qml和c++代码之间共享时,你才可以使用单例。这是我写的一个 qt 插件的摘录:

void MyPlugin::initializeEngine(QQmlEngine* engine, const char* uri) {
Q_UNUSED(engine);
Q_UNUSED(uri);

/* First, instantiate MQTT Singleton */
MqttClientSingleton::set(new MqttClient{});
engine->setObjectOwnership(MqttClientSingleton::get(), QQmlEngine::CppOwnership);
}

void MyPlugin::registerTypes(const char* uri) {
Q_UNUSED(uri);

qmlRegisterSingletonType<MqttClient>(uri, 1, 0, "MqttClientSingleton", [](QQmlEngine*, QJSEngine*) -> QObject* {
return MqttClientSingleton::get();
});

如果您不需要插件,只需创建实例并在主函数上注册类型,您可以在项目中的 main.cpp 示例中找到。

确保在实例化任何 MqttClient 之前调用 mosquitto_lib_init(); 并在程序结束时调用 mosquitto_lib_cleanup();,毕竟 < em>MqttClient 实例已被删除。

关于c++ - 如何使用 GitHub Project MosQtitto 中的 MqttClientSingletonClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com