Класс QGeoPositionInfoSource
Класс QGeoPositionInfoSource — это абстрактный базовый класс для распространения обновлений местоположения. Подробнее...
| Заголовок: | #include <QGeoPositionInfoSource> |
| qmake: | QT += positioning |
| С момента: | Qt 5.2 |
| Наследуется от: | QObject |
| Наследуется: |
Этот класс был представлен в Qt 5.2.
Типы публичного доступа
| Перечисление | Ошибка { ОшибкаДоступа, ОшибкаЗакрытия, БезОшибок, ОшибкаНеизвестногоИсточника } |
| Перечисление | МетодОпределенияМестоположения { НетМетодовОпределенияМестоположения, МетодыОпределенияМестоположенияПоСпутникам, МетодыОпределенияМестоположенияБезИспользованияСпутников, ВсеМетодыОпределенияМестоположения } |
| Флаги | МетодыОпределенияМестоположения |
Свойства
- минимальныйИнтервалОбновления : const int
- имяИсточника : const QString
- интервалОбновления : int
Публичные функции
| QGeoPositionInfoSource(QObject *parent) | |
| виртуальный | ~QGeoPositionInfoSource() |
| QVariant | свойствоБэкэнда(const QString &name) const |
| виртуальный QGeoPositionInfoSource::Ошибка | ошибка() const = 0 |
| виртуальный QGeoPositionInfo | последнееИзвестноеМестоположение(bool fromSatellitePositioningMethodsOnly = ...) const = 0 |
| виртуальный int | минимальныйИнтервалОбновления() const = 0 |
| QGeoPositionInfoSource::МетодыОпределенияМестоположения | предпочтительныеМетодыОпределенияМестоположения() const |
| bool | установитьСвойствоБэкэнда(const QString &name, const QVariant &value) |
| виртуальный void | установитьПредпочтительныеМетодыОпределенияМестоположения(QGeoPositionInfoSource::МетодыОпределенияМестоположения methods) |
| виртуальный void | установитьИнтервалОбновления(int msec) |
| QString | имяИсточника() const |
| виртуальный QGeoPositionInfoSource::МетодыОпределенияМестоположения | поддерживаемыеМетодыОпределенияМестоположения() const = 0 |
| int | интервалОбновления() const |
Свойства с публичным доступом
| виртуальный void | запроситьОбновление(int timeout = ...) = 0 |
| виртуальный void | начатьОбновления() = 0 |
| виртуальный void | остановитьОбновления() = 0 |
Сигналы
| void | ошибка(QGeoPositionInfoSource::Ошибка positioningError) |
| void | местоположениеОбновлено(const QGeoPositionInfo &update) |
| void | измененыПоддерживаемыеМетодыОпределенияМестоположения() |
| void | таймаутОбновления() |
Статические публичные члены
| QStringList | доступныеИсточники() |
| QGeoPositionInfoSource * | создатьПоУмолчанию(QObject *parent) |
| QGeoPositionInfoSource * | создатьПоУмолчанию(const QVariantMap ¶meters, QObject *parent) |
| QGeoPositionInfoSource * | создатьИсточник(const QString &sourceName, QObject *parent) |
| QGeoPositionInfoSource * | создатьИсточник(const QString &sourceName, const QVariantMap ¶meters, QObject *parent) |
Подробное описание
Статическая функция QGeoPositionInfoSource::createDefaultSource() создает источник местоположения по умолчанию, подходящий для платформы, если он доступен. В противном случае QGeoPositionInfoSource проверит наличие доступных плагинов, реализующих интерфейс QGeoPositionInfoSourceFactory.
Пользователи подкласса QGeoPositionInfoSource могут запросить текущее местоположение с помощью запроситьОбновление(), или начать и остановить регулярные обновления местоположения с помощью начатьОбновления() и остановитьОбновления(). Когда обновление доступно, испускается сигнал местоположениеОбновлено(). Последнее известное местоположение можно получить с помощью последнееИзвестноеМестоположение().
Если необходимы регулярные обновления местоположения, установитьИнтервалОбновления() можно использовать для указания частоты испускания этих обновлений. Если интервал не задан, обновления предоставляются просто тогда, когда они становятся доступны. Например:
// Emit updates every 10 seconds if available
QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(0);
if (source)
source->setUpdateInterval(10000); Чтобы удалить интервал обновления, который был ранее установлен, вызовите установитьИнтервалОбновления() со значением 0.
Обратите внимание, что источник местоположения может иметь минимальное значение для интервалов обновлений, как возвращается минимальныйИнтервалОбновления().
Документация по типам членов
Перечисление QGeoPositionInfoSource::Ошибка
Перечисление Ошибка представляет ошибки, которые могут возникнуть.
| Константа | Значение | Описание |
|---|---|---|
QGeoPositionInfoSource::AccessError |
0 |
Настройка подключения к удаленному бэкенду определения местоположения не удалась, так как у приложения не было необходимых привилегий. |
QGeoPositionInfoSource::ClosedError |
1 |
Удаленный бэкэнд определения местоположения закрыл соединение, что происходит, например, в случае переключения пользователем сервисов местоположения на выключение. Как только служба местоположения будет снова включена, возобновятся регулярные обновления. |
QGeoPositionInfoSource::NoError |
3 |
Ошибка не возникла. |
QGeoPositionInfoSource::UnknownSourceError |
2 |
Произошла неизвестная ошибка. |
перечисление QGeoPositionInfoSource::МетодОпределенияМестоположенияФлаги QGeoPositionInfoSource::МетодыОпределенияМестоположения
Определяет типы методов определения местоположения.
| Постоянная | Значение | Описание |
|---|---|---|
QGeoPositionInfoSource::NoPositioningMethods |
0x00000000 |
Ни один из методов позиционирования. |
QGeoPositionInfoSource::SatellitePositioningMethods |
0x000000ff |
Методы позиционирования на основе спутников, такие как GPS или ГЛОНАСС. |
QGeoPositionInfoSource::NonSatellitePositioningMethods |
0xffffff00 |
Другие методы позиционирования, такие как идентификатор ячейки 3GPP или позиционирование на основе Wi-Fi. |
QGeoPositionInfoSource::AllPositioningMethods |
0xffffffff |
Методы позиционирования на основе спутников, как только они станут доступны. В противном случае используются методы, не основанные на спутниках. |
Тип PositioningMethods — это typedef для QFlags<PositioningMethod>. Он хранит логическое ИЛИ сочетание значений PositioningMethod.
Документация свойств
minimumUpdateInterval : const int
Это свойство содержит минимальное время (в миллисекундах), необходимое для получения обновления позиции.
Это минимальное значение, принимаемое setUpdateInterval() и requestUpdate().
Функции доступа:
| virtual int | minimumUpdateInterval() const = 0 |
sourceName : const QString
Это свойство содержит уникальное имя реализации источника позиционирования, используемого в настоящее время.
Это то же имя, которое можно передать в createSource() для создания нового экземпляра реализации конкретного источника позиционирования.
Функции доступа:
| QString | sourceName() const |
updateInterval : int
Это свойство содержит запрашиваемый интервал в миллисекундах между каждым обновлением.
Если интервал обновления не задан (или равен 0), источник будет предоставлять обновления так часто, как необходимо.
Если интервал обновления задан, источник будет предоставлять обновления с интервалом, максимально приближенным к запрошенному интервалу. Если запрошенный интервал меньше minimumUpdateInterval(), используется минимальный интервал.
Изменения интервала обновления происходят как можно быстрее, однако время, затраченное на изменение, может варьироваться в зависимости от реализации. То, учитывается ли затраченное время с предыдущего интервала как часть нового интервала, также зависит от реализации.
Значение по умолчанию для этого свойства равно 0.
Примечание: Реализации подклассов должны вызывать базовую реализацию setUpdateInterval(), чтобы updateInterval() возвращал правильное значение.
Функции доступа:
| int | updateInterval() const |
| virtual void | setUpdateInterval(int msec) |
Документация функций-членов
QGeoPositionInfoSource::QGeoPositionInfoSource(QObject *parent)
Создает источник позиционирования с указанным parent.
[signal] void QGeoPositionInfoSource::error(QGeoPositionInfoSource::Error positioningError)
Этот сигнал испускается после возникновения ошибки. Параметр positioningError описывает тип возникшей ошибки.
Этот сигнал не испускается, когда произошла updateTimeout().
Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в этом примере:
connect(geoPositionInfoSource, QOverload<QGeoPositionInfoSource::Error>::of(&QGeoPositionInfoSource::error),
[=](QGeoPositionInfoSource::Error positioningError){ /* ... */ });
[signal] void QGeoPositionInfoSource::positionUpdated(const QGeoPositionInfo &update)
Если вызываются startUpdates() или requestUpdate(), этот сигнал испускается, когда становится доступным обновление.
Значение update содержит значение нового обновления.
[pure virtual slot] void QGeoPositionInfoSource::requestUpdate(int timeout = ...)
Попытка получить текущую позицию и вывести positionUpdated() с этой информацией. Если текущая позиция не может быть найдена в течение заданного timeout (в миллисекундах) или если timeout меньше значения, возвращаемого minimumUpdateInterval(), испускается updateTimeout().
Если таймаут равен нулю, таймаут по умолчанию устанавливается на разумное значение для источника.
Это ничего не делает, если другой запрос на обновление находится в процессе. Однако его можно вызвать, даже если startUpdates() уже был вызван, и регулярные обновления находятся в процессе.
Если источник использует несколько методов позиционирования, он пытается получить текущую позицию от наиболее точного метода позиционирования в течение заданного таймаута.
[pure virtual slot] void QGeoPositionInfoSource::startUpdates()
Начинает испускать обновления с регулярными интервалами, как указано в setUpdateInterval().
Если setUpdateInterval() не был вызван, источник будет испускать обновления, как только они станут доступны.
Сигнал updateTimeout() будет испущен, если этот подкласс QGeoPositionInfoSource определит, что он не сможет предоставить регулярные обновления. Это может произойти, если спутниковая привязка потеряна или обнаружена ошибка оборудования. Обновления позиции возобновятся, если данные станут доступны позже. Сигнал updateTimeout() не будет снова испущен до возобновления периодических обновлений.
В iOS начиная с версии 8, фреймворк Core Location требует дополнительных записей в Info.plist приложения с ключами NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription и строкой, отображаемой в запросе на авторизацию. Ключ NSLocationWhenInUseUsageDescription используется при запросе разрешения на использование сервисов определения местоположения, когда приложение находится на переднем плане. Ключ NSLocationAlwaysUsageDescription используется при запросе разрешения на использование сервисов определения местоположения всякий раз, когда приложение запущено (как в фоновом, так и в фоновом режиме). Если оба ключа определены, NSLocationWhenInUseUsageDescription имеет приоритет в режиме переднего плана.
[pure virtual slot] void QGeoPositionInfoSource::stopUpdates()
Останавливает испускание обновлений с регулярными интервалами.
[signal] void QGeoPositionInfoSource::supportedPositioningMethodsChanged()
Этот сигнал испускается, когда изменились поддерживаемые методы позиционирования. Причиной изменения может быть пользователь, включивший/выключивший сервисы определения местоположения или ограничение сервисов определения местоположения определенными типами (например, только GPS). Обратите внимание, что изменения поддерживаемых методов позиционирования не могут быть обнаружены на всех платформах. supportedPositioningMethods() предоставляет обзор текущей поддержки платформы.
Эта функция была добавлена в Qt 5.12.
[signal] void QGeoPositionInfoSource::updateTimeout()
Если был вызван requestUpdate(), этот сигнал будет испущен, если текущая позиция не была получена в течение указанного таймаута.
Если был вызван startUpdates(), этот сигнал будет испущен, если этот подкласс QGeoPositionInfoSource определит, что он не сможет предоставить дальнейшие регулярные обновления. Этот сигнал не будет испущен снова до возобновления регулярных обновлений.
Хотя срабатывание этого сигнала можно считать условием ошибки, это не подразумевает испускание сигнала error(). Требуется только испускание сигнала updateTimeout(), чтобы указать таймаут.
[virtual] QGeoPositionInfoSource::~QGeoPositionInfoSource()
Уничтожает источник позиционирования.
[static] QStringList QGeoPositionInfoSource::availableSources()
Возвращает список доступных плагинов источника. Это включает любой плагин-бекенд по умолчанию для текущей платформы.
QVariant QGeoPositionInfoSource::backendProperty(const QString &name) const
Возвращает значение свойства бэкенда с именем name, если оно присутствует. В противном случае возвращаемое значение будет недействительным. Поддерживаемые свойства бэкенда перечислены и описаны в Qt Positioning plugins#Default plugins.
Эта функция была добавлена в Qt 5.14.
См. также setBackendProperty.
END_OF_DOCUMENT_MARKER
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, который считывает данные о местоположении из системных источников по умолчанию или из плагина с наивысшим приоритетом.
Возвращает 0, если у системы нет источника позиционирования по умолчанию, не удалось найти допустимые плагины или у пользователя нет разрешения на доступ к текущему местоположению.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(const QVariantMap ¶meters, QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, который считывает данные о местоположении из системных источников по умолчанию или из плагина с наивысшим приоритетом.
Возвращает nullptr, если у системы нет источника позиционирования по умолчанию, не удалось найти допустимые плагины или у пользователя нет разрешения на доступ к текущему местоположению.
Этот метод передаёт parameters фабрике для конфигурации источника.
Эта функция была добавлена в Qt 5.14.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sourceName, QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, загружая плагин с именем sourceName.
Возвращает 0, если плагин не найден.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sourceName, const QVariantMap ¶meters, QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, загружая плагин с именем sourceName.
Возвращает nullptr, если плагин не найден.
Этот метод передаёт parameters фабрике для конфигурации источника.
Эта функция была добавлена в Qt 5.14.
[pure virtual] QGeoPositionInfoSource::Error QGeoPositionInfoSource::error() const
Возвращает тип последней произошедшей ошибки.
[pure virtual] QGeoPositionInfo QGeoPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly = ...) const
Возвращает обновление с последним известным местоположением или пустое обновление, если оно недоступно.
Если fromSatellitePositioningMethodsOnly равно true, возвращает последнее известное местоположение, полученное от спутникового метода позиционирования; если оно недоступно, возвращается пустое обновление.
QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::preferredPositioningMethods() const
Возвращает методы позиционирования, установленные с помощью setPreferredPositioningMethods().
См. также setPreferredPositioningMethods().
bool QGeoPositionInfoSource::setBackendProperty(const QString &name, const QVariant &value)
Устанавливает свойство, специфичное для бэкенда, с именем name со значением value. Возвращает true при успехе, false в противном случае. Свойства, специфичные для бэкенда, могут использоваться для конфигурации поведения подсистемы позиционирования во время выполнения. Поддерживаемые свойства, специфичные для бэкенда, перечислены и описаны в Плагинах Qt Positioning#Плагинах по умолчанию.
Эта функция была добавлена в Qt 5.14.
См. также backendProperty.
[virtual] void QGeoPositionInfoSource::setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods)
Устанавливает предпочтительные методы позиционирования для этого источника в methods.
Если methods включает метод, который не поддерживается источником, этот метод будет проигнорирован.
Если methods не включает ни одного доступного/поддерживаемого источником метода, предпочтительные методы будут установлены на набор доступных методов источника. Если у источника нет доступных методов (например, из-за выключенной службы геолокации или отсутствия службы геолокации), переданные methods принимаются как есть.
Примечание: При переопределении этого метода подклассы должны вызывать базовую реализацию метода, чтобы гарантировать, что preferredPositioningMethods() возвращает правильное значение.
См. также preferredPositioningMethods() и supportedPositioningMethods().
[pure virtual] QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::supportedPositioningMethods() const
Возвращает доступные методы позиционирования для этого источника. Доступность определяется как возможность использования на момент вызова этой функции. Поэтому такие пользовательские настройки, как выключенная служба геолокации или ограничения для спутниковых поставщиков позиционирования, отражаются этой функцией. Уведомления о событиях изменения статуса могут быть получены с помощью supportedPositioningMethodsChanged().
Не все платформы различают различные методы позиционирования или сообщают о текущей пользовательской конфигурации устройства. Таблица ниже предоставляет общий обзор текущей ситуации на различных платформах:
| Платформа | Краткое описание |
|---|---|
| Android | Статус отдельных поставщиков и общее состояние службы геолокации известны и сообщаются, когда служба геолокации активна. |
| GeoClue | Всегда возвращает AllPositioningMethods. |
| GeoClue2 | Отдельные поставщики не различимы, но отражены отключенные службы геолокации. |
| iOS/tvOS | Всегда возвращает AllPositioningMethods. |
| macOS | Всегда возвращает AllPositioningMethods. |
| Windows (UWP) | Отдельные поставщики не различимы, но отражены отключенные службы геолокации. |
См. также supportedPositioningMethodsChanged() и setPreferredPositioningMethods().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qgeopositioninfosource.html