- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何使用 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/
我正在尝试弄清楚如何使用 Alepez 的 GitHub 项目 MosQtitto 实现多个 MqttClient。 https://github.com/alepez/MosQtitto 用Mqtt
我是一名优秀的程序员,十分优秀!