📢 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; | ||
// | // タイマの作成 | ||
QTimer | QTimer *pTimer = new QTimer(&a); | ||
QObject::connect( | |||
// タイマーのコールバックを設定 | |||
QObject::connect(pTimer, &QTimer::timeout, pTimer, [&publisher]() { | |||
publisher.publishMessage("qt/topic", "Hello, MQTT!"); | publisher.publishMessage("qt/topic", "Hello, MQTT!"); | ||
}); | }); | ||
// 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(); | ||