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
}