이 페이지에서

Qt Bluetooth 개요

Qt Bluetooth API의 대표적인 사용 사례는 다음과 같습니다:

  • 로컬 블루투스 장치에 대한 정보를 조회합니다.
  • 범위 내에 있는 다른 블루투스 기기를 검색하고 해당 기기에 대한 정보를 가져옵니다.
  • OBEX 객체 푸시 프로파일(OPP)을 사용하여 원격 기기에 파일을 전송합니다.
  • 시리얼 포트 프로파일(SPP)을 사용하여 RFCOMM 채널을 통해 원격 장치에 연결합니다.
  • SPP를 사용하여 수신 연결을 허용하는 RFCOMM 서버를 생성합니다.
  • 블루투스 저에너지(Bluetooth Low Energy) 장치에 대한 사양을 가져옵니다.
  • 블루투스 저에너지 기기에 연결합니다.
  • 블루투스 저에너지 장치로부터 광고를 수신합니다.

Object Push Profile은 Android 및 Windows에서 지원되지 않으므로 유의하십시오.

참고: Windows에서 Qt를 사용하면 RFCOMM 기능 중일부를 구성할 수 없습니다. 서비스의 ' ServiceClassIds ' 및 ' ProtocolDescriptorList ' 필드는 자동으로 채워집니다. 따라서 Windows에서 이러한 필드에 사용자 정의 값을 지정하여 서비스를 등록하면 예상한 결과가 나오지 않을 수 있습니다.

참고: Win32 백엔드에서는 수신 신호 강도표시기 (RSSI)와 Bluetooth LE 기기가 알리는 제조업체별 데이터(Manufacturer Specific Data)를 지원하지 않습니다. 또한, Windows 설정을 통해 이전에 페어링된 기기만 검색할 수 있습니다.

다음 섹션에서는 위의 사용 사례에 대해 Qt Bluetooth C++ API 클래스를 사용하는 방법을 설명합니다.

로컬 장치 정보 가져오기

Qt Bluetooth API에는 세 가지 주요 목적이 있습니다. 첫 번째는 로컬 및 원격 장치 정보를 가져오는 것입니다. 장치 정보를 조회하는 첫 단계는 해당 장치에서 블루투스를 사용할 수 있는지 확인하고, 로컬 장치의 주소와 이름을 읽는 것입니다. ` QBluetoothLocalDevice ` 클래스는 이러한 모든 정보를 제공합니다. 또한 이 클래스를 사용하여 블루투스를 켜거나 끄고, 장치의 가시성을 설정하며, 현재 연결 상태를 확인할 수 있습니다.

QBluetoothLocalDevice localDevice;
QString localDeviceName;

// Check if Bluetooth is available on this device
if (localDevice.isValid()) {

    // Turn Bluetooth on
    localDevice.powerOn();

    // Read local device name
    localDeviceName = localDevice.name();

    // Make it visible to others
    localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);

    // Get connected devices
    QList<QBluetoothAddress> remotes;
    remotes = localDevice.connectedDevices();
}

블루투스 장치 검색

QBluetoothLocalDevice 와 유사하게, 이 API는 원격 기기에 대한 유사한 정보를 제공하는 ` QBluetoothDeviceInfo `를 제공합니다. ` QBluetoothDeviceInfo ` 객체를 직접 생성하여 데이터를 채울 수도 있지만, 더 쉬운 방법은 ` QBluetoothDeviceDiscoveryAgent `를 사용하여 연결 가능한 범위 내의 가시적인 블루투스 기기에 대한 자동 검색을 시작하는 것입니다.

void MyClass::startDeviceDiscovery()
{

    // 검색 에이전트를 생성하고 해당 신호에 연결합니다
    QBluetoothDeviceDiscoveryAgent*discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
            this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));

    // 탐색 시작
    discoveryAgent->start();

    //...
}

// 로컬 슬롯에서 발견된 장치에 대한 정보를 읽습니다
void MyClass::deviceDiscovered(const QBluetoothDeviceInfo&device)
{
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}

기기 간 데이터 교환

두 개의 블루투스 지원 장치 간 통신에 있어 보다 유연한 접근 방식은 가상 직렬 포트 연결을 생성하고 해당 연결을 통해 데이터를 자유롭게 교환하는 것입니다. 이는 직렬 포트 프로파일(SPP)을 통해 수행할 수 있습니다. 직렬 포트 프로파일은 블루투스 전송 프로토콜인 RFCOMM을 통해 직렬 연결을 에뮬레이트합니다.

수신되는 SPP 연결을 수신하려면 ` QBluetoothServer`를 사용하여 수신 연결을 수신 대기해야 합니다.

rfcommServer = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, this);
connect(rfcommServer, &QBluetoothServer::newConnection,
        this, QOverload<>::of(&ChatServer::clientConnected));
bool result = rfcommServer->listen(localAdapter);
if (!result) {
    qWarning() << "Cannot bind chat server to" << localAdapter.toString();
   return;
}

QBluetoothSocket 를 사용하여 클라이언트 역할을 수행하는 다른 기기에서 이 서버에 연결하려면:

void ChatClient::startClient(const QBluetoothServiceInfo&remoteService)
{
    if (socket)
        return;

    // 서비스에 연결
    socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
    qDebug() << "Create socket";
    socket->connectToService(remoteService);
    qDebug() << "ConnectToService done";

    connect(socket, &QBluetoothSocket::readyRead, this, &ChatClient::readSocket);
    connect(socket, &QBluetoothSocket::connected, this, QOverload<>::of(&ChatClient::connected));
    connect(socket, &QBluetoothSocket::disconnected, this, &ChatClient::disconnected);
    connect(socket, &QBluetoothSocket::errorOccurred, this, &ChatClient::onSocketErrorOccurred);
}

이러한 연결 방식을 사용하면 양방향으로 어떤 형태의 데이터든 주고받을 수 있습니다. 이는 게임이나 두 기기에서 실행되는 애플리케이션 인스턴스 간의 상태 동기화에 매우 적합합니다. 서버와 클라이언트 구성 방법에 대한 더 자세한 설명은 QBluetoothServer 및 QBluetoothSocket 클래스의 상세 설명 섹션을 참조하십시오. SPP를 시작하기에 좋은 예제는 Bluetooth Chat 예제입니다.

블루투스 저에너지

블루투스 저에너지(Bluetooth Low Energy)는 블루투스 스마트(Bluetooth Smart)라고도 불리며, 저전력 기기가 서로 통신할 수 있게 해주는 새로운 기술입니다. 이 기술과 관련된 Qt API에 대한 자세한 내용은 ‘블루투스 저에너지 개요’에서 확인할 수 있습니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.