Qt NFC Vue d'ensemble
Avec l'API Qt NFC, les cas d'utilisation typiques sont les suivants :
- Détection des étiquettes NFC.
- Lire et écrire des messages NDEF.
- Enregistrement des gestionnaires de messages NDEF.
- Partage de fichiers et de messages.
Les sections suivantes décrivent comment utiliser les classes Qt NFC C++ et les types QML pour les cas d'utilisation ci-dessus.
Remarque : sur Android, la détection de nouvelles étiquettes NFC ne fonctionne que dans les applications de premier plan. Les services Android ne prennent pas en charge cette fonctionnalité en raison des limitations de l'API du côté d'Android. La seule façon d'utiliser une balise dans un service est de fournir une interface AIDL acceptant la balise et de la transmettre à Qt, comme le montre l'exemple suivant.
public void setTag(Tag pTag) { Intent newIntent = new Intent(); newIntent.putExtra(NfcAdapter.EXTRA_TAG, pTag); QtNative.onNewIntent(newIntent); }
Vue d'ensemble du C++
L'API C++ permet d'accéder à l'ensemble des fonctionnalités de l'API Qt NFC. Cette section présente les principales fonctionnalités mises à la disposition des développeurs.
Détection des étiquettes NFC
La classe QNearFieldManager est responsable de la détection des nouvelles étiquettes NFC qui entrent en contact avec l'appareil. Les signaux QNearFieldManager::targetDetected() et QNearFieldManager::targetLost() sont émis lorsqu'une étiquette entre ou sort de la portée. Le paramètre QNearFieldTarget transmis sert de point d'interaction principal pour chaque étiquette détectée. La détection ne commence cependant pas tant que QNearFieldManager::startTargetDetection() n'a pas été appelé.
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);
Enfin, la détection peut être arrêtée :
m_manager->stopTargetDetection();
Bien que chaque instance QNearFieldTarget appartienne à l'instance QNearFieldManager qui lui est liée, il peut être utile de supprimer manuellement chaque instance. Sinon, elles continueraient d'exister jusqu'à ce que l'instance QNearFieldManager soit supprimée. La meilleure façon de le faire est de répondre au signal QNearFieldManager::targetLost() :
void MainWindow::targetLost(QNearFieldTarget *target) { target->deleteLater(); }
Remarque : l'objet cible ne doit être supprimé via deleteLater() que s'il est supprimé à l'intérieur du slot.
Connexion des étiquettes NFC
Toutes les fonctions de QNearFieldTarget qui nécessitent une connexion en créent une d'elles-mêmes. Une connexion active empêchera d'autres instances de créer une connexion car une seule connexion à la fois est autorisée.
Qt 5 a déconnecté la balise à la fin des fonctions pour permettre à d'autres instances de se connecter. QNearFieldManager::setKeepConnection() permet de modifier ce comportement.
Depuis Qt 6, QNearFieldTarget conserve la connexion par défaut. La connexion n'est fermée que lorsque QNearFieldTarget est détruit ou que QNearFieldManager::disconnect() est appelé.
Lecture et écriture de messages NDEF
L'instance QNearFieldTarget renvoyée par le signal QNearFieldManager::targetDetected() est utilisée pour interagir avec la balise. La lecture et l'écriture d'un message est une opération asynchrone. La classe QNearFieldTarget::RequestId associe les opérations individuelles et leurs résultats.
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; } }
Une fois que la requête QNearFieldTarget::readNdefMessages() a été traitée avec succès, le signal QNearFieldTarget::ndefMessageRead() est émis. Chaque QNdefMessage renvoyé peut consister en zéro ou plusieurs entrées QNdefRecord, qui peuvent être identifiées par leur type. Pour plus d'informations sur le traitement des enregistrements, voir la documentation de la classe QNdefRecord. Comme le montre le code ci-dessus, l'écriture des messages NDEF est déclenchée par QNearFieldTarget::writeNdefMessages(). La réussite de l'opération d'écriture est indiquée par l'émission du signal QNearFieldTarget::requestCompleted() avec l'identifiant de demande correspondant. Tout type d'erreur pendant la lecture ou l'écriture est indiqué par 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.