Qt NFC 개요
Qt NFC API의 대표적인 사용 사례는 다음과 같습니다.
- NFC 태그 감지.
- NDEF 메시지 읽기 및 쓰기.
- NDEF 메시지 핸들러 등록.
- 파일 및 메시지 공유.
다음 섹션에서는 위의 사용 사례에 대해 Qt NFC C++ 클래스와 QML 유형을 사용하는 방법을 설명합니다.
참고: Android에서는 새로운 NFC 태그 감지가 포그라운드 애플리케이션에서만 작동합니다. Android 측의 API 제한으로 인해 Android 서비스는 이를 지원하지 않습니다. 서비스에서 태그를 사용하는 유일한 방법은 다음 예제와 같이 태그를 수신하는 AIDL 인터페이스를 제공하고 이를 Qt로 전달하는 것입니다.
public void setTag(Tag pTag) {
Intent newIntent = new Intent();
newIntent.putExtra(NfcAdapter.EXTRA_TAG, pTag);
QtNative.onNewIntent(newIntent);
}C++ 개요
C++ API는 Qt NFC API의 모든 기능 세트에 대한 액세스를 제공합니다. 이 섹션에서는 개발자가 사용할 수 있는 주요 기능을 소개합니다.
NFC 태그 감지
QNearFieldManager 클래스는 기기의 감지 범위 내에 들어오는 새로운 NFC 태그를 감지하는 역할을 합니다. 태그가 감지 범위 내에 들어오거나 벗어날 때 QNearFieldManager::targetDetected() 및 QNearFieldManager::targetLost() 신호가 발생합니다. 전달된 QNearFieldTarget 매개변수는 감지된 각 태그에 대한 주요 상호작용 지점 역할을 합니다. 단, QNearFieldManager::startTargetDetection()이 호출되기 전까지는 감지가 실제로 시작되지 않습니다.
m_manager = new QNearFieldManager(this);
connect(m_manager, &QNearFieldManager::targetDetected,
this, &MainWindow::targetDetected);
connect(m_manager, &QNearFieldManager::targetLost,
this, &MainWindow::targetLost);
m_manager->startTargetDetection(QNearFieldTarget::NdefAccess);마지막으로 감지를 중지할 수 있습니다:
m_manager->stopTargetDetection();각 QNearFieldTarget 인스턴스는 관련 QNearFieldManager 인스턴스가 소유하고 있지만, 각 인스턴스를 수동으로 삭제하는 것이 유리할 수 있습니다. 그렇지 않으면 QNearFieldManager 인스턴스가 삭제될 때까지 해당 인스턴스들이 계속 존재하게 됩니다. 이를 수행하는 가장 좋은 방법은 QNearFieldManager::targetLost() 신호에 응답하는 것입니다:
void MainWindow::targetLost(QNearFieldTarget *target)
{
target->deleteLater();
}참고: 대상객체는 슬롯 내부에서 삭제되는 경우에만 deleteLater()를 통해 삭제해야 합니다.
NFC 태그 연결
QNearFieldTarget 의 연결이 필요한 모든 함수는 자체적으로 연결을 생성합니다. 활성 연결이 있는 경우, 한 번에 하나의 연결만 허용되므로 다른 인스턴스가 연결을 생성할 수 없습니다.
Qt 5에서는 다른 인스턴스가 연결할 수 있도록 함수 종료 시 태그 연결을 끊었습니다. QNearFieldManager::setKeepConnection()을 사용하면 이 동작을 변경할 수 있습니다.
Qt 6부터는 QNearFieldTarget 가 기본적으로 연결을 유지합니다. 연결은 QNearFieldTarget 가 소멸되거나 QNearFieldManager::disconnect()가 호출될 때만 종료됩니다.
NDEF 메시지 읽기 및 쓰기
QNearFieldManager::targetDetected() 신호에 의해 반환된 QNearFieldTarget 인스턴스는 태그와 상호 작용하는 데 사용됩니다. 메시지 읽기 및 쓰기는 비동기 작업입니다. QNearFieldTarget::RequestId 클래스는 개별 작업과 그 결과를 연관시킵니다.
void MainWindow::targetDetected(QNearFieldTarget *target)
{
switch (m_touchAction) {
case NoAction:
break;
case ReadNdef:
connect(target, &QNearFieldTarget::ndefMessageRead, this, &MainWindow::ndefMessageRead);
connect(target, &QNearFieldTarget::error, this, &MainWindow::targetError);
m_request = target->readNdefMessages();
if (!m_request.isValid()) // cannot read messages
targetError(QNearFieldTarget::NdefReadError, m_request);
break;
case WriteNdef:
connect(target, &QNearFieldTarget::requestCompleted, this, &MainWindow::ndefMessageWritten);
connect(target, &QNearFieldTarget::error, this, &MainWindow::targetError);
m_request = target->writeNdefMessages(QList<QNdefMessage>() << ndefMessage());
if (!m_request.isValid()) // cannot write messages
targetError(QNearFieldTarget::NdefWriteError, m_request);
break;
}
}QNearFieldTarget::readNdefMessages() 요청이 성공적으로 처리되면 QNearFieldTarget::ndefMessageRead() 신호가 발생합니다. 반환된 각 QNdefMessage 는 0개 이상의 QNdefRecord 항목으로 구성될 수 있으며, 이러한 항목은 유형을 통해 식별할 수 있습니다. 레코드 처리에 대한 자세한 내용은 QNdefRecord 클래스 문서를 참조하십시오. 위 코드에서 볼 수 있듯이, NDEF 메시지 쓰기는 QNearFieldTarget::writeNdefMessages()를 통해 트리거됩니다. 쓰기 작업이 성공적으로 완료되면 해당 요청 ID와 함께 QNearFieldTarget::requestCompleted() 신호가 발송됩니다. 읽기 또는 쓰기 중 발생하는 모든 유형의 오류는 QNearFieldTarget::error()를 통해 표시됩니다.
© 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.