簡體   English   中英

MQTT:無法訂閱 Qt 中的主題

[英]MQTT: cannot subsribe to the topic in Qt

我試圖從 localhost 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;
    }

我總是看到我沒有訂閱的消息。 盡管如此,我還是成功連接到了本地主機,所以我在控制台 output(最后一行)上看到了它:

Could not subscribe. Is there a valid connection?
qml: cannot connect
client is connected

我想知道client is connected是最后一個,盡管沒有線程可以使代碼異步運行。 從理論上講,代碼必須等待,直到它連接到代理,然后運行 rest,但據我自己理解 - 它不等待連接並走得更遠,所以它不知道 - 它在哪里必須訂閱? 有什么想法嗎?


編輯:我忘記包含isConnected方法:

void mqtt::isConnected()
{
    qDebug()<<"client is connected";
}

訂閱必須在連接之后給出,因此您必須在 isConnected 方法中調用 subscribe:

void mqtt::isConnected()
{
    qDebug() << "client is connected";
    topic.setFilter("test");     
    auto subscription = m_client->subscribe(topic, qos0); 
    qDebug() << subscription
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM