「Qtの基礎 - Bluetooth Low Energy」の版間の差分

ナビゲーションに移動 検索に移動
649行目: 649行目:
**: セキュリティリスク軽減
**: セキュリティリスク軽減
**: 設定可能な時間値
**: 設定可能な時間値
<br>
==== 使用例 ====
<syntaxhighlight lang="c++">
#include <QObject>
#include <QBluetoothLocalDevice>
#include <QBluetoothAddress>
#include <memory>
#include <QDebug>
class BLEPairing : public QObject
{
  Q_OBJECT
private:
    std::unique_ptr<QBluetoothLocalDevice> localDevice;
    QString getPairingStatusString(QBluetoothLocalDevice::Pairing status)
    {
      switch (status) {
          case QBluetoothLocalDevice::Unpaired:        return "未ペアリング";
          case QBluetoothLocalDevice::Paired:          return "ペアリング済み";
          case QBluetoothLocalDevice::AuthorizedPaired: return "認証済みペアリング";
          default:                                      return "不明な状態";
      }
    }
public:
    explicit BLEPairing(QObject* parent = nullptr) : QObject(parent)
    {
      try {
          // ローカルデバイスの初期化
          localDevice = std::make_unique<QBluetoothLocalDevice>(this);
          // シグナルの接続
          connect(localDevice.get(), &QBluetoothLocalDevice::pairingFinished, this, &BLEPairing::onPairingFinished);
          connect(localDevice.get(), &QBluetoothLocalDevice::error, this, &BLEPairing::onError);
          connect(localDevice.get(), &QBluetoothLocalDevice::pairingDisplayConfirmation, this, &BLEPairing::onPairingDisplayConfirmation);
          connect(localDevice.get(), &QBluetoothLocalDevice::pairingDisplayPinCode, this, &BLEPairing::onPairingDisplayPinCode);
      }
      catch (const std::exception &e) {
          qDebug() << "初期化エラー:" << e.what();
          throw;
      }
    }
    // ペアリングを開始
    void requestPairing(const QBluetoothAddress &address)
    {
      try {
          if (!localDevice->isValid()) {
            emit errorOccurred("ローカルBluetoothデバイスが無効です");
            return;
          }
          qDebug() << "ペアリングを開始: " << address.toString();
          localDevice->requestPairing(address, QBluetoothLocalDevice::Paired);
      }
      catch (const std::exception &e) {
          QString errorMsg = QString("ペアリング開始エラー: %1").arg(e.what());
          qDebug() << errorMsg;
          emit errorOccurred(errorMsg);
      }
    }
    // ペアリングを解除
    void removePairing(const QBluetoothAddress& address)
    {
      try {
          if (!localDevice->isValid()) {
            emit errorOccurred("ローカルBluetoothデバイスが無効");
            return;
          }
          qDebug() << "ペアリングを解除: " << address.toString();
          localDevice->requestPairing(address, QBluetoothLocalDevice::Unpaired);
      }
      catch (const std::exception &e) {
          QString errorMsg = QString("ペアリング解除エラー: %1").arg(e.what());
          qDebug() << errorMsg;
          emit errorOccurred(errorMsg);
      }
    }
    // ペアリング状態を確認
    QBluetoothLocalDevice::Pairing getPairingStatus(const QBluetoothAddress &address)
    {
      try {
          if (!localDevice->isValid()) {
            emit errorOccurred("ローカルBluetoothデバイスが無効");
            return QBluetoothLocalDevice::Unpaired;
          }
          return localDevice->pairingStatus(address);
      }
      catch (const std::exception &e) {
          QString errorMsg = QString("ペアリング状態確認エラー: %1").arg(e.what());
          qDebug() << errorMsg;
          emit errorOccurred(errorMsg);
          return QBluetoothLocalDevice::Unpaired;
      }
    }
signals:
    void pairingComplete(const QBluetoothAddress& address, bool success);
    void pairingConfirmationRequired(const QBluetoothAddress& address, QString pin);
    void errorOccurred(const QString& error);
private slots:
    void onPairingFinished(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing)
    {
      QString status = getPairingStatusString(pairing);
      qDebug() << "ペアリング完了: " << address.toString() << "-" << status;
      emit pairingComplete(address, pairing == QBluetoothLocalDevice::Paired);
    }
    void onError()
    {
      QString errorMsg = "Bluetoothデバイスでエラーが発生";
      qDebug() << errorMsg;
      emit errorOccurred(errorMsg);
    }
    void onPairingDisplayConfirmation(const QBluetoothAddress &address, QString pin)
    {
      qDebug() << "ペアリング確認が必要:";
      qDebug() << "  デバイス: " << address.toString();
      qDebug() << "  PIN: " << pin;
      emit pairingConfirmationRequired(address, pin);
    }
    void onPairingDisplayPinCode(const QBluetoothAddress &address, QString pin)
    {
      qDebug() << "PINコードの表示:";
      qDebug() << "  デバイス: " << address.toString();
      qDebug() << "  PIN: " << pin;
    }
};
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー