MQTT:无法订阅 Qt 中的主题
MQTT: cannot subsribe to the topic in Qt
我正在尝试从本地主机 mqtt 代理读取数据。为此,我使用以下代码:
m_client = new QMqttClient(this);
m_client->setHostname("127.0.0.1");
m_client->setPort(1883);
m_client->connectToHost();
connect(m_client,&QMqttClient::connected,this,&mqtt::isConnected);//um zu sehen, ob man verbundet hat
topic.setFilter("test");
auto subscription = m_client->subscribe(topic, qos0);
if(!subscription){
qDebug()<<"Could not subscribe. Is there a valid connection?";
return 0;
}
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::updateMessage);
return 1;
然而,当我检查时,订阅是否成功:
if(!subscription){
qDebug()<<"Could not subscribe. Is there a valid connection?";
return 0;
}
我总是看到消息说我没有订阅。尽管如此,我还是成功连接到了本地主机,所以我在控制台输出(最后一行)中看到了它:
Could not subscribe. Is there a valid connection?
qml: cannot connect
client is connected
我想知道 client is connected
是最后一个,尽管没有线程可以异步生成代码 运行。从理论上讲,代码必须等待,直到它连接到代理,然后 运行 其余部分,但据我自己理解 - 它不会等待连接并继续进行,因此它不会知道 - 它必须在哪里订阅?有什么想法吗?
编辑:我忘记包含 isConnected
方法:
void mqtt::isConnected()
{
qDebug()<<"client is connected";
}
订阅必须在连接后给出,所以必须在isConnected方法中调用订阅:
void mqtt::isConnected()
{
qDebug() << "client is connected";
topic.setFilter("test");
auto subscription = m_client->subscribe(topic, qos0);
qDebug() << subscription
}
我正在尝试从本地主机 mqtt 代理读取数据。为此,我使用以下代码:
m_client = new QMqttClient(this);
m_client->setHostname("127.0.0.1");
m_client->setPort(1883);
m_client->connectToHost();
connect(m_client,&QMqttClient::connected,this,&mqtt::isConnected);//um zu sehen, ob man verbundet hat
topic.setFilter("test");
auto subscription = m_client->subscribe(topic, qos0);
if(!subscription){
qDebug()<<"Could not subscribe. Is there a valid connection?";
return 0;
}
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::updateMessage);
return 1;
然而,当我检查时,订阅是否成功:
if(!subscription){
qDebug()<<"Could not subscribe. Is there a valid connection?";
return 0;
}
我总是看到消息说我没有订阅。尽管如此,我还是成功连接到了本地主机,所以我在控制台输出(最后一行)中看到了它:
Could not subscribe. Is there a valid connection?
qml: cannot connect
client is connected
我想知道 client is connected
是最后一个,尽管没有线程可以异步生成代码 运行。从理论上讲,代码必须等待,直到它连接到代理,然后 运行 其余部分,但据我自己理解 - 它不会等待连接并继续进行,因此它不会知道 - 它必须在哪里订阅?有什么想法吗?
编辑:我忘记包含 isConnected
方法:
void mqtt::isConnected()
{
qDebug()<<"client is connected";
}
订阅必须在连接后给出,所以必须在isConnected方法中调用订阅:
void mqtt::isConnected()
{
qDebug() << "client is connected";
topic.setFilter("test");
auto subscription = m_client->subscribe(topic, qos0);
qDebug() << subscription
}