📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

230行目: 230行目:
  private:
  private:
     QMqttClient *m_client;
     QMqttClient *m_client;
     QString m_host;
     QString     m_host;
     quint16 m_port;
     quint16     m_port;
   
   
  public:
  public:
259行目: 259行目:
       m_client->setHostname(host);
       m_client->setHostname(host);
       m_client->setPort(port);
       m_client->setPort(port);
      // ユーザ名とパスワードが指定されている場合は設定
      if (!username.isEmpty()) {
          m_client->setUsername(username);
      }
      if (!password.isEmpty()) {
          m_client->setPassword(password);
      }
   
   
       // 非同期で接続を開始
       // 非同期で接続を開始
275行目: 284行目:
       auto publish = m_client->publish(topic, message, 1);
       auto publish = m_client->publish(topic, message, 1);
       if (!publish) {
       if (!publish) {
           qWarning() << "メッセージの発行に失敗しました: " << topic;
           qWarning() << "メッセージの発行に失敗しました : " << topic;
           return;
           return;
       }
       }
287行目: 296行目:
       }
       }
     }
     }
signals:
    // 接続確立時のシグナルを追加
    void connectionEstablished();
   
   
  private slots:
  private slots:
295行目: 308行目:
           case QMqttClient::Connected:
           case QMqttClient::Connected:
             qInfo() << "MQTTブローカーに接続しました";
             qInfo() << "MQTTブローカーに接続しました";
            emit connectionEstablished();  // 接続確立時にシグナルを発行
             break;
             break;
           case QMqttClient::Disconnected:
           case QMqttClient::Disconnected:
344行目: 358行目:
       }
       }
   
   
       qCritical() << "MQTTエラー:" << errorMsg;
       qCritical() << "MQTTエラー :" << errorMsg;
   
   
       // エラー発生時は再接続を試みる
       // エラー発生時は再接続を試みる
       if (m_client->state() != QMqttClient::Connected) {
       if (m_client->state() != QMqttClient::Connected) {
           QTimer::singleShot(5000, [this]() {
           QTimer::singleShot(5000, this, [this]() {
             qInfo() << "再接続を試みます...";
             qInfo() << "再接続を試みます...";
             this->connectToHost(m_host, m_port);
             this->connectToHost(m_host, m_port, m_client->username(), m_client->password());
           });
           });
       }
       }
367行目: 381行目:
   
   
     MqttPublisher publisher;
     MqttPublisher publisher;
    publisher.connectToHost("<IPアドレスまたはホスト名  例: localhost>", <MQTT通信するポート番号  例: 1883>);
   
   
     // 定期的にメッセージを送信
     // タイマの作成
     QTimer timer;
     QTimer *pTimer = new QTimer(&a);
     QObject::connect(&timer, &QTimer::timeout, [&publisher]() {
 
    // タイマーのコールバックを設定
     QObject::connect(pTimer, &QTimer::timeout, pTimer, [&publisher]() {
       publisher.publishMessage("qt/topic", "Hello, MQTT!");
       publisher.publishMessage("qt/topic", "Hello, MQTT!");
     });
     });
 
     timer.start(1000);  // 1秒おきに送信
     // Publisher側で接続状態の変化を監視し、接続成功時にタイマーを開始
    QObject::connect(&publisher, &Publisher::connectionEstablished, pTimer, [pTimer]() {
      pTimer->start(3000);  // 3秒おきに送信
    });
 
    // MQTTブローカーに接続
    publisher.connectToHost("<IPアドレスまたはホスト名  例: localhost>",
                            <MQTT通信するポート番号  例: 1883>,
                            "<MQTTユーザ名 (匿名ユーザを許可している場合は空でも可)>",
                            "<MQTTユーザのパスワード (匿名ユーザを許可している場合は空でも可>");
      
      
     return a.exec();
     return a.exec();