12,796
回編集
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> | ||