Класс QGeoAreaMonitorSource
Класс QGeoAreaMonitorSource позволяет обнаруживать изменения близости для заданного набора координат. Подробнее...
| Заголовок: | #include <QGeoAreaMonitorSource> |
| CMake: | find_package(Qt6 COMPONENTS Positioning REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Positioning) |
| qmake: | QT += positioning |
| С момента: | Qt 5.2 |
| Наследует: | QObject |
Типы публичного доступа
| Перечисление | AreaMonitorFeature { PersistentAreaMonitorFeature, AnyAreaMonitorFeature } |
| Флаги | AreaMonitorFeatures |
| Перечисление | Error { AccessError, InsufficientPositionInfo, NoError, UnknownSourceError } |
Публичные функции
| QGeoAreaMonitorSource(QObject *parent) | |
| virtual | ~QGeoAreaMonitorSource() |
| virtual QList<QGeoAreaMonitorInfo> | activeMonitors() const = 0 |
| virtual QList<QGeoAreaMonitorInfo> | activeMonitors(const QGeoShape &lookupArea) const = 0 |
| 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 |
| 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 |
Сигналы
| 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) |
Статические публичные члены
| 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)
Выдается, когда текущая позиция переместилась из позиции внутри активного монитора в позицию вне контролируемой области.
Обновление содержит новую позицию.
[signal] void QGeoAreaMonitorSource::errorOccurred(QGeoAreaMonitorSource::Error areaMonitoringError)
Этот сигнал излучается после возникновения ошибки. Параметр areaMonitoringError описывает тип произошедшей ошибки.
[signal] void QGeoAreaMonitorSource::monitorExpired(const QGeoAreaMonitorInfo &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()
Возвращает список доступных плагинов мониторов, включая системный бэкенд по умолчанию, если он доступен.
[virtual, since 6.2] QVariant QGeoAreaMonitorSource::backendProperty(const QString &name) const
Возвращает значение свойства бэкенда с именем name, если оно присутствует. В противном случае возвращаемое значение будет недействительным.
Эта функция была введена в Qt 6.2.
См. также setBackendProperty().
[static] QGeoAreaMonitorSource *QGeoAreaMonitorSource::createDefaultSource(QObject *parent)
Создает и возвращает источник монитора с заданным parent, который отслеживает области, используя ресурсы на базовой системе.
Возвращает nullptr если система не поддерживает мониторинг позиции.
[static] QGeoAreaMonitorSource *QGeoAreaMonitorSource::createSource(const QString &sourceName, QObject *parent)
Создает и возвращает источник монитора с заданным parent, загружая плагин с именем sourceName.
Возвращает nullptr если плагин не найден.
[pure virtual] QGeoAreaMonitorSource::Error QGeoAreaMonitorSource::error() const
Возвращает тип последней ошибки.
Примечание: С Qt6 последняя ошибка всегда сбрасывается при вызове startMonitoring() или requestUpdate().
[virtual] QGeoPositionInfoSource *QGeoAreaMonitorSource::positionInfoSource() const
Возвращает текущий QGeoPositionInfoSource, используемый этим объектом QGeoAreaMonitorSource. Функция вернет QGeoPositionInfoSource::createDefaultSource(), если другой объект не был задан.
Функция возвращает nullptr если даже по умолчанию QGeoPositionInfoSource не существует.
Любое использование возвращенного экземпляра QGeoPositionInfoSource должно учитывать тот факт, что он может находиться в другом потоке.
См. также QGeoPositionInfoSource и setPositionInfoSource().
[pure virtual] bool QGeoAreaMonitorSource::requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal)
Включает однократный мониторинг области. Мониторинг области для monitor будет выполняться до тех пор, пока этот экземпляр QGeoAreaMonitorSource не излучит сигнал в первый раз. После того как сигнал был излучен, 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(), он преобразуется в однократное поведение.
Примечание: С Qt6 этот метод всегда сбрасывает последнюю ошибку до NoError перед началом мониторинга.
См. также startMonitoring() и stopMonitoring().
[virtual, since 6.2] bool QGeoAreaMonitorSource::setBackendProperty(const QString &name, const QVariant &value)
Устанавливает свойство бэкенда с именем name в значение value. Возвращает true при успехе, в противном случае возвращает false. Свойства, специфичные для бэкенда, могут использоваться для настройки поведения подсистемы мониторинга области во время выполнения.
Эта функция была введена в Qt 6.2.
См. также backendProperty().
[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.
Примечание: Начиная с Qt6 этот метод всегда сбрасывает последнюю ошибку до NoError перед запуском мониторинга.
См. также 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-6.2/qgeoareamonitorsource.html