Sur cette page

QGeoAreaMonitorSource Class

La classe QGeoAreaMonitorSource permet de détecter les changements de proximité pour un ensemble donné de coordonnées. En savoir plus...

En-tête : #include <QGeoAreaMonitorSource>
CMake : find_package(Qt6 REQUIRED COMPONENTS Positioning)
target_link_libraries(mytarget PRIVATE Qt6::Positioning)
qmake : QT += positioning
Hérite de : QObject

Types publics

enum AreaMonitorFeature { PersistentAreaMonitorFeature, AnyAreaMonitorFeature }
flags AreaMonitorFeatures
enum Error { AccessError, InsufficientPositionInfo, NoError, UnknownSourceError }

Fonctions publiques

QGeoAreaMonitorSource(QObject *parent)
virtual ~QGeoAreaMonitorSource()
virtual QList<QGeoAreaMonitorInfo> activeMonitors() const = 0
virtual QList<QGeoAreaMonitorInfo> activeMonitors(const QGeoShape &lookupArea) const = 0
(since 6.2) virtual QVariant backendProperty(const QString &name) const
virtual QGeoAreaMonitorSource::Error error() const = 0
virtual QGeoPositionInfoSource *positionInfoSource() const
virtual bool requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0
(since 6.2) virtual bool setBackendProperty(const QString &name, const QVariant &value)
virtual void setPositionInfoSource(QGeoPositionInfoSource *newSource)
QString sourceName() const
virtual bool startMonitoring(const QGeoAreaMonitorInfo &monitor) = 0
virtual bool stopMonitoring(const QGeoAreaMonitorInfo &monitor) = 0
virtual QGeoAreaMonitorSource::AreaMonitorFeatures supportedAreaMonitorFeatures() const = 0

Signaux

void areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
void areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
void errorOccurred(QGeoAreaMonitorSource::Error areaMonitoringError)
void monitorExpired(const QGeoAreaMonitorInfo &monitor)

Membres publics statiques

QStringList availableSources()
QGeoAreaMonitorSource *createDefaultSource(QObject *parent)
QGeoAreaMonitorSource *createSource(const QString &sourceName, QObject *parent)

Description détaillée

Un objet `QGeoAreaMonitorSource` émet des signaux lorsque la position actuelle se trouve à l'intérieur ou à l'extérieur de la zone spécifiée. Chaque zone est définie par un objet ` QGeoAreaMonitorInfo `. Par exemple :

public:
    MyClass() : QObject()
    {
        QGeoAreaMonitorSource*monitor = QGeoAreaMonitorSource::createDefaultSource(this);
        if (monitor) {
            connect(monitor, SIGNAL(areaEntered(QGeoAreaMonitorInfo,QGeoPositionInfo)),
                    this, SLOT(areaEntered(QGeoAreaMonitorInfo,QGeoPositionInfo)));
            connect(monitor, SIGNAL(areaExited(QGeoAreaMonitorInfo,QGeoPositionInfo)),
                    this, SLOT(areaExited(QGeoAreaMonitorInfo,QGeoPositionInfo)));

            QGeoAreaMonitorInfo bigBen("Big Ben");
            QGeoCoordinate position(51,50104,-0,124632);
            bigBen.setArea(QGeoCircle(position, 100));

            monitor->startMonitoring(bigBen);

        } else {
            qDebug() << "Could not create default area monitor";
        }
    }

public Q_SLOTS :
    void areaEntered(const QGeoAreaMonitorInfo&mon, const QGeoPositionInfo&update)
    {
        Q_UNUSED(mon);

        qDebug() << "Now within 100 meters, current position is" << update.coordinate();
    }

    void areaExited(const QGeoAreaMonitorInfo&mon, const QGeoPositionInfo&update)
    {
        Q_UNUSED(mon);

        qDebug() << "No longer within 100 meters, current position is" << update.coordinate();
    }

QGeoAreaMonitorSource suit le modèle singleton. Chaque instance de la classe ayant la même valeur pour sourceName() partage le même backend de surveillance de zone. Si un nouvel objet QGeoAreaMonitorInfo est ajouté via startMonitoring() ou requestUpdate(), il peut être récupéré par une autre instance de cette classe (à condition qu’elles proviennent du même plug-in de fournisseur de surveillance de zone). Le même modèle singleton s’applique à l’instance ` QGeoPositionInfoSource ` utilisée par cette classe. L’extrait de code suivant illustre ce comportement :

QGeoAreaMonitorSource *s1 = QGeoAreaMonitorSource::createSource("blah", this);
QGeoAreaMonitorSource *s2 = QGeoAreaMonitorSource::createSource("blah", this);
QVERIFY(s1->positionInfoSource() == s2->positionInfoSource);

Documentation sur les types de membres

enum QGeoAreaMonitorSource::AreaMonitorFeature
flags QGeoAreaMonitorSource::AreaMonitorFeatures

Définit les types de capacités de surveillance de zone.

ConstanteValeurDescription
QGeoAreaMonitorSource::PersistentAreaMonitorFeature0x00000001QGeoAreaMonitorInfo Les instances peuvent être rendues persistantes. Un moniteur persistant reste actif même lorsque l’application qui le gère n’est pas en cours d’exécution.
QGeoAreaMonitorSource::AnyAreaMonitorFeature0xffffffffCorrespond à toutes les fonctionnalités de surveillance de zone possibles.

Le type AreaMonitorFeatures est une définition de type (typedef) pour QFlags<AreaMonitorFeature>. Il stocke une combinaison « OU » de valeurs AreaMonitorFeature.

enum QGeoAreaMonitorSource::Error

Définit les types de méthodes de positionnement.

L'énumération Error représente les erreurs pouvant survenir.

ConstanteValeurDescription
QGeoAreaMonitorSource::AccessError0L'établissement de la connexion au backend de surveillance de zone à distance a échoué car l'application ne disposait pas des privilèges requis.
QGeoAreaMonitorSource::InsufficientPositionInfo1La source de surveillance de zone n'a pas pu récupérer de position ou la précision de celle-ci n'est pas suffisante pour assurer une surveillance de zone efficace.
QGeoAreaMonitorSource::NoError3Aucune erreur ne s'est produite.
QGeoAreaMonitorSource::UnknownSourceError2Une erreur non identifiée s’est produite.

Documentation des fonctions membres

[explicit] QGeoAreaMonitorSource::QGeoAreaMonitorSource(QObject *parent)

Crée une source de surveillance avec l'parent spécifiée.

[virtual noexcept] QGeoAreaMonitorSource::~QGeoAreaMonitorSource()

Supprime la source du moniteur.

[pure virtual] QList<QGeoAreaMonitorInfo> QGeoAreaMonitorSource::activeMonitors() const

Renvoie la liste de tous les moniteurs actifs connus de l'objet QGeoAreaMonitorSource.

Un moniteur actif a été lancé via la méthode ` startMonitoring()`. Pour chaque moniteur actif, l’objet source émettra les signaux requis, tels que ` areaEntered()` ou ` areaExited()`. Plusieurs instances de ` QGeoAreaMonitorSource ` au sein d’une même application partagent les mêmes objets de moniteur actif.

À moins qu’un QGeoAreaMonitorInfo actif n’appelle isPersistent(), un QGeoAreaMonitorInfo actif sera arrêté dès que l’application en cours se fermera.

[pure virtual] QList<QGeoAreaMonitorInfo> QGeoAreaMonitorSource::activeMonitors(const QGeoShape &lookupArea) const

Renvoie la liste de tous les moniteurs actifs connus de l'objet QGeoAreaMonitorSource dont le centre se trouve dans lookupArea. Si lookupArea est vide, la liste renvoyée sera vide.

Un moniteur actif a été lancé via ` startMonitoring()`. Pour chaque moniteur actif, l’objet source émettra les signaux requis, tels que ` areaEntered()` ou ` areaExited()`. Plusieurs instances de ` QGeoAreaMonitorSource ` au sein d’une même application partagent les mêmes objets de moniteurs actifs.

À moins qu’un QGeoAreaMonitorInfo actif n’émette un isPersistent(), un QGeoAreaMonitorInfo actif sera arrêté dès que l’application en cours se fermera.

Voir également QGeoShape.

[signal] void QGeoAreaMonitorSource::areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)

Émis lorsque la position actuelle est passée d'une position située en dehors de l'monitor active à une position située à l'intérieur de la zone surveillée.

L'update contient la nouvelle position.

[signal] void QGeoAreaMonitorSource::areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)

Ce message est émis lorsque la position actuelle est passée d'un emplacement situé dans l'monitor e active à un emplacement situé en dehors de la zone surveillée.

L'update conserve la nouvelle position.

[static] QStringList QGeoAreaMonitorSource::availableSources()

Renvoie une liste des plugins de surveillance disponibles, y compris le backend système par défaut s'il en existe un.

[virtual, since 6.2] QVariant QGeoAreaMonitorSource::backendProperty(const QString &name) const

Renvoie la valeur de la propriété spécifique au backend nommée « name », si elle existe. Sinon, la valeur renvoyée sera invalide.

Cette fonction a été introduite dans Qt 6.2.

Voir également setBackendProperty().

[static] QGeoAreaMonitorSource *QGeoAreaMonitorSource::createDefaultSource(QObject *parent)

Crée et renvoie une source de surveillance dotée de l'parent spécifiée, qui surveille les zones utilisant des ressources sur le système sous-jacent.

Renvoie l'nullptr si le système ne prend pas en charge la surveillance des positions.

[static] QGeoAreaMonitorSource *QGeoAreaMonitorSource::createSource(const QString &sourceName, QObject *parent)

Crée et renvoie une source de surveillance avec l'parent indiquée, en chargeant le plugin nommé sourceName.

Renvoie nullptr si le plugin est introuvable.

[pure virtual] QGeoAreaMonitorSource::Error QGeoAreaMonitorSource::error() const

Renvoie le type de l'erreur qui s'est produite en dernier.

Remarque : depuis Qt6, la dernière erreur est toujours réinitialisée lors de l'appel de ` startMonitoring()` ou ` requestUpdate()`.

[signal] void QGeoAreaMonitorSource::errorOccurred(QGeoAreaMonitorSource::Error areaMonitoringError)

Ce signal est émis lorsqu'une erreur s'est produite. Le paramètre « areaMonitoringError » décrit le type d'erreur qui s'est produite.

[signal] void QGeoAreaMonitorSource::monitorExpired(const QGeoAreaMonitorInfo &monitor)

Émis lorsque monitor a expiré. Un moniteur de zone expiré est automatiquement supprimé de la liste des activeMonitors().

Voir également activeMonitors().

[virtual] QGeoPositionInfoSource *QGeoAreaMonitorSource::positionInfoSource() const

Renvoie l'QGeoPositionInfoSource e actuel utilisé par cet objet QGeoAreaMonitorSource. La fonction renvoie QGeoPositionInfoSource::createDefaultSource() si aucun autre objet n'a été défini.

La fonction renvoie nullptr si aucun objet QGeoPositionInfoSource, même par défaut, n’existe.

Toute utilisation de l’instance QGeoPositionInfoSource renvoyée doit tenir compte du fait qu’elle peut se trouver dans un autre thread.

Voir également ` QGeoPositionInfoSource ` et ` setPositionInfoSource()`.

[pure virtual] bool QGeoAreaMonitorSource::requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal)

Permet la surveillance ponctuelle d'une zone. La surveillance de la zone pour monitor se poursuivra jusqu'à ce que cette instance de QGeoAreaMonitorSource émette un signal signal pour la première fois. Une fois ce signal émis, monitor est automatiquement supprimé de la liste des activeMonitors(). Si monitor n'est pas valide ou si sa date d'expiration est dépassée, cette fonction renvoie false.

QGeoAreaMonitor singleShotMonitor;
QGeoAreaMonitorSource * source = QGeoAreaMonitorSource::createDefaultSource(this);
//...
bool ret = source->requestUpdate(singleShotMonitor,
                      SIGNAL(areaExited(QGeoAreaMonitor,QGeoPositionInfo)));

L’objet singleShotMonitor ci-dessus cessera d’envoyer des mises à jour une fois que le signal areaExited() aura été émis pour la première fois. Jusqu’à ce moment, tout autre signal peut être émis zéro ou plusieurs fois, selon le contexte de la zone.

Il n’est pas possible de demander simultanément des mises à jour pour plusieurs signaux d’un même objet de surveillance. Le dernier appel à cette fonction détermine le signal à partir duquel les mises à jour cessent. À ce stade, seuls les signaux ` areaEntered()` et ` areaExited()` peuvent être utilisés pour mettre fin au processus de surveillance.

La demande de surveillance persistante sur une instance de ` QGeoAreaMonitorSource ` échoue si le backend de surveillance de zone ne prend pas en charge ` QGeoAreaMonitorSource::PersistentAreaMonitorFeature`.

Si monitor a déjà été enregistré via startMonitoring(), il est converti en un comportement à déclenchement unique.

Remarque : depuis Qt6, cette méthode réinitialise toujours la dernière erreur sur ` NoError ` avant de démarrer la surveillance.

Voir également startMonitoring() et stopMonitoring().

[virtual, since 6.2] bool QGeoAreaMonitorSource::setBackendProperty(const QString &name, const QVariant &value)

Définit la propriété spécifique au backend nommée « name » sur la valeur « value ». Renvoie « true » en cas de succès, sinon renvoie « false ». Les propriétés spécifiques au backend peuvent être utilisées pour configurer le comportement du sous-système de surveillance de zone lors de l'exécution.

Cette fonction a été introduite dans Qt 6.2.

Voir également backendProperty().

[virtual] void QGeoAreaMonitorSource::setPositionInfoSource(QGeoPositionInfoSource *newSource)

Définit le nouveau moteur de surveillance de zone ( QGeoPositionInfoSource ) qui sera utilisé par cet objet de surveillance de zone ( QGeoAreaMonitorSource ). Le moteur de surveillance de zone devient le nouveau parent ( QObject ) de l'objet de surveillance de zone ( newSource). L'ancien objet de surveillance de zone ( QGeoPositionInfoSource ) sera supprimé. Toutes les instances de surveillance de zone ( QGeoAreaMonitorSource ) basées sur le même moteur de surveillance de zone ( sourceName()) partagent la même instance de surveillance de zone ( QGeoPositionInfoSource ).

Cela peut s’avérer utile lorsqu’il est souhaitable de manipuler le système de positionnement utilisé par le moteur de surveillance de zone.

Notez que la gestion de la propriété doit être assurée par les sous-classes de ` QGeoAreaMonitorSource`. En raison du modèle singleton sous-jacent à cette classe, ` newSource ` peut être déplacé vers un nouveau thread.

Voir également positionInfoSource().

QString QGeoAreaMonitorSource::sourceName() const

Renvoie le nom unique de l'implémentation de la source de surveillance de zone actuellement utilisée.

Il s'agit du même nom que celui qui peut être transmis à la méthode createSource() afin de créer une nouvelle instance d'une implémentation de source de moniteur de zone particulière.

[pure virtual] bool QGeoAreaMonitorSource::startMonitoring(const QGeoAreaMonitorInfo &monitor)

Renvoie ` true ` si la surveillance de ` monitor ` a pu être lancée avec succès ; sinon, renvoie ` false`. L'impossibilité de lancer la surveillance peut s'expliquer par l'indisponibilité d'une source d'informations de position par défaut appropriée, alors qu'aucune source alternative ` QGeoPositionInfoSource ` n'a été définie via la fonction ` setPositionInfoSource()`.

Si monitor est déjà actif, l’objet de surveillance existant sera remplacé par la nouvelle référence monitor. L’identification des instances de QGeoAreaMonitorInfo s’effectue via QGeoAreaMonitorInfo::identifier(). Par conséquent, cette fonction peut également être utilisée pour mettre à jour des surveillances actives.

Si la date d’expiration de ` monitor ` est dépassée, cette fonction renvoie `false`. L’appel de cette fonction pour un moniteur à déclenchement unique déjà enregistré via ` requestUpdate()` fait passer le moniteur en mode de surveillance permanente.

La demande de surveillance persistante sur une instance de ` QGeoAreaMonitorSource ` échoue si le backend de surveillance de zone ne prend pas en charge ` QGeoAreaMonitorSource::PersistentAreaMonitorFeature`.

Remarque : depuis Qt6, cette méthode réinitialise toujours la dernière erreur sur ` NoError ` avant de démarrer la surveillance.

Voir également ` stopMonitoring()`.

[pure virtual] bool QGeoAreaMonitorSource::stopMonitoring(const QGeoAreaMonitorInfo &monitor)

Renvoie « true » si monitor a bien été supprimé de la liste des activeMonitors(); sinon, renvoie « false ». Ce comportement est indépendant du fait que monitor ait été enregistré via startMonitoring() ou requestUpdate().

[pure virtual] QGeoAreaMonitorSource::AreaMonitorFeatures QGeoAreaMonitorSource::supportedAreaMonitorFeatures() const

Renvoie les fonctionnalités de surveillance de zone disponibles pour cette source.

© 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.