Spec-Zone.ru › Qt 5.14

Класс QGeoAreaMonitorSource

Класс QGeoAreaMonitorSource позволяет определять изменения близости для заданного набора координат. Подробнее...

Заголовок: #include <QGeoAreaMonitorSource>
qmake: QT += positioning
С момента: Qt 5.2
Наследует: QObject

Этот класс был представлен в Qt 5.2.

  • Список всех членов, включая наследуемые

Типы public

Перечисление AreaMonitorFeature { PersistentAreaMonitorFeature, AnyAreaMonitorFeature }
Флаги AreaMonitorFeatures
Перечисление Error { AccessError, InsufficientPositionInfo, NoError, UnknownSourceError }

Функции public

QGeoAreaMonitorSource(QObject *parent)
virtual ~QGeoAreaMonitorSource()
virtual QList<QGeoAreaMonitorInfo> activeMonitors() const = 0
virtual QList<QGeoAreaMonitorInfo> activeMonitors(const QGeoShape &lookupArea) const = 0
virtual QGeoAreaMonitorSource::Error error() const = 0
virtual QGeoPositionInfoSource * positionInfoSource() const
virtual bool requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0
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

Сигналы

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

Статические public-члены

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

Подробное описание

Класс QGeoAreaMonitorSource отправляет сигналы, когда текущее положение находится в диапазоне или вышло из диапазона заданной области. Каждая область задается объектом QGeoAreaMonitorInfo. Например:

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 следует паттерну синглтона. Каждый экземпляр класса с одинаковым sourceName() использует один и тот же бэкенд мониторинга областей. Если новый объект QGeoAreaMonitorInfo добавляется через startMonitoring() или requestUpdate(), он может быть получен другим экземпляром этого класса (при условии, что они получены от одного и того же плагина поставщика мониторинга областей). Тот же паттерн синглтона применяется к экземпляру QGeoPositionInfoSource, используемому этим классом. Следующий фрагмент кода подчеркивает поведение:

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

Документация по типам членов

Перечисление QGeoAreaMonitorSource::AreaMonitorFeatureФлаги QGeoAreaMonitorSource::AreaMonitorFeatures

Определяет типы возможностей мониторинга областей.

Постоянная Значение Описание
QGeoAreaMonitorSource::PersistentAreaMonitorFeature 0x00000001 Объекты QGeoAreaMonitorInfo могут быть сделаны постоянными. Постоянный монитор остается активным даже когда приложение, управляющее монитором, не работает.
QGeoAreaMonitorSource::AnyAreaMonitorFeature 0xffffffff Соответствует всем возможным функциям мониторинга областей.

Тип AreaMonitorFeatures является типом-синонимом для QFlags<AreaMonitorFeature>. Он хранит логическое ИЛИ сочетание значений AreaMonitorFeature.

Перечисление QGeoAreaMonitorSource::Error

Определяет типы методов позиционирования.

Перечисление Error представляет ошибки, которые могут возникнуть.

Постоянная Значение Описание
QGeoAreaMonitorSource::AccessError 0 Установка соединения с удаленным бэкендом мониторинга областей не удалась из-за отсутствия необходимых привилегий у приложения.
QGeoAreaMonitorSource::InsufficientPositionInfo 1 Источник мониторинга областей не смог получить позицию или точность позиции недостаточно высока для эффективного мониторинга областей.
QGeoAreaMonitorSource::NoError 3 Ошибка не произошла.
QGeoAreaMonitorSource::UnknownSourceError 2 Произошла неопределенная ошибка.

Документация по функциям-членам

QGeoAreaMonitorSource::QGeoAreaMonitorSource(QObject *parent)

Создает монитор с заданным parent.

Вызвано при входе в область.void QGeoAreaMonitorSource::areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)

Вызывается, когда текущее положение переместилось из положения вне активного monitor в положение внутри контролируемой области.

update содержит новое положение.

Вызвано при выходе из области.void QGeoAreaMonitorSource::areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)

Вызывается, когда текущее положение переместилось из положения внутри активного monitor в положение вне контролируемой области.

update содержит новое положение.

Вызвано при возникновении ошибки.void QGeoAreaMonitorSource::error(QGeoAreaMonitorSource::Error areaMonitoringError)

Этот сигнал генерируется после возникновения ошибки. Параметр areaMonitoringError описывает тип возникшей ошибки.

Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя функции Qt предоставляет удобный помощник для получения указателя функции, как показано в этом примере:

connect(geoAreaMonitorSource, QOverload<QGeoAreaMonitorSource::Error>::of(&QGeoAreaMonitorSource::error),
    [=](QGeoAreaMonitorSource::Error areaMonitoringError){ /* ... */ });

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

Вызывается, когда monitor истек. Истекший монитор области автоматически удаляется из списка activeMonitors().

См. также activeMonitors().

[virtual] QGeoAreaMonitorSource::~QGeoAreaMonitorSource()

Удаляет монитор.

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

Возвращает список всех активных мониторов, известных объекту QGeoAreaMonitorSource.

Активный монитор был запущен с помощью startMonitoring(), и объект источника будет генерировать необходимые сигналы, такие как areaEntered() или areaExited(). Несколько экземпляров QGeoAreaMonitorSource в одном приложении используют те же объекты активных мониторов.

Если активный QGeoAreaMonitorInfo не isPersistent(), активный QGeoAreaMonitorInfo будет остановлен при завершении текущего приложения.

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

Возвращает список всех активных мониторов, известных объекту QGeoAreaMonitorSource, центр которых находится в пределах lookupArea. Если lookupArea пустая, возвращаемый список будет пустым.

Активный монитор был запущен с помощью startMonitoring(), и объект источника будет генерировать необходимые сигналы, такие как areaEntered() или areaExited(). Несколько экземпляров QGeoAreaMonitorSource в одном приложении используют те же объекты мониторов.

Если активный QGeoAreaMonitorInfo не isPersistent(), активный QGeoAreaMonitorInfo будет остановлен при завершении текущего приложения.

См. также QGeoShape.

[static] QStringList QGeoAreaMonitorSource::availableSources()

Возвращает список доступных плагинов мониторинга, включая системный бэкенд по умолчанию, если он доступен.

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

Создаёт и возвращает монитор с заданным parent, который отслеживает области, используя ресурсы на базовой системе.

Возвращает 0, если система не поддерживает мониторинг позиций.

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

Создаёт и возвращает монитор с заданным parent, загружая плагин с именем sourceName.

Возвращает 0, если плагин не найден.

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

Возвращает тип последней ошибки.

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

Возвращает текущий QGeoPositionInfoSource, используемый этим объектом QGeoAreaMonitorSource. Функция вернёт QGeoPositionInfoSource::createDefaultSource(), если не был задан другой объект.

Функция возвращает 0, если даже системный QGeoPositionInfoSource по умолчанию не существует.

Любое использование возвращаемого экземпляра QGeoPositionInfoSource должно учитывать тот факт, что он может находиться в другом потоке.

См. также QGeoPositionInfoSource и setPositionInfoSource().

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

Включает однократный мониторинг области. Мониторинг области для monitor будет выполняться до тех пор, пока этот экземпляр QGeoAreaMonitorSource не вызовет signal в первый раз. После вызова сигнала monitor автоматически удаляется из списка activeMonitors(). Если monitor недействителен или срок его действия истек, функция возвращает false.

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

Указанный выше singleShotMonitor объект прекратит отправлять обновления, как только сигнал areaExited() будет выпущен в первый раз. До этого момента любой другой сигнал может быть выпущен ноль или более раз в зависимости от контекста области.

Невозможно одновременно запросить обновления для более чем одного сигнала одного и того же объекта монитора. Последний вызов этой функции определяет сигнал, после которого обновления прекращаются. На этом этапе для завершения процесса мониторинга можно использовать только сигналы areaEntered() и areaExited().

Запрос постоянного мониторинга на экземпляре QGeoAreaMonitorSource не удаётся, если бэкенд мониторинга областей не поддерживает QGeoAreaMonitorSource::PersistentAreaMonitorFeature.

Если monitor уже зарегистрирован через startMonitoring(), он преобразуется в однократное поведение.

См. также startMonitoring() и stopMonitoring().

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

Устанавливает новый QGeoPositionInfoSource для использования этим объектом QGeoAreaMonitorSource. Бэкенд мониторинга области становится новым родителем QObject для newSource. Предыдущий объект QGeoPositionInfoSource будет удалён. Все экземпляры QGeoAreaMonitorSource, основанные на том же sourceName(), используют один и тот же экземпляр QGeoPositionInfoSource.

Это может быть полезно, когда необходимо манипулировать системой позиционирования, используемой движком мониторинга областей.

Обратите внимание, что управление владением должно выполняться подклассами QGeoAreaMonitorSource. Из-за паттерна синглтон за этим классом newSource может быть перемещён в новый поток.

См. также positionInfoSource().

QString QGeoAreaMonitorSource::sourceName() const

Возвращает уникальное имя используемой реализации источника мониторинга области.

Это то же самое имя, которое можно передать в createSource() для создания нового экземпляра конкретной реализации источника мониторинга области.

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

Возвращает true если мониторинг monitor удалось успешно запустить; в противном случае возвращает false. Причина невозможности запуска мониторинга может заключаться в недоступности соответствующего источника информации о местоположении по умолчанию, если альтернативный QGeoPositionInfoSource не задан через setPositionInfoSource().

Если monitor уже активен, существующий объект монитора будет заменён новой ссылкой monitor. Идентификация экземпляров QGeoAreaMonitorInfo происходит через QGeoAreaMonitorInfo::identifier(). Поэтому эту функцию также можно использовать для обновления активных мониторов.

Если срок действия monitor истек, функция возвращает false. Вызов этой функции для уже зарегистрированного через requestUpdate() однократного монитора переключает монитор в режим постоянного мониторинга.

Запрос постоянного мониторинга на экземпляре QGeoAreaMonitorSource не удаётся, если бэкенд мониторинга областей не поддерживает QGeoAreaMonitorSource::PersistentAreaMonitorFeature.

См. также stopMonitoring().

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

Возвращает true, если monitor был успешно удален из списка activeMonitors; в противном случае возвращает false. Это поведение независимо от того, был ли monitor зарегистрирован с помощью startMonitoring() или requestUpdate().

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

Возвращает доступные функции мониторинга области для этого источника.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qgeoareamonitorsource.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API