Класс QGeoPositionInfoSource
Класс QGeoPositionInfoSource — это абстрактный базовый класс для распространения обновлений местоположения. Подробнее...
| Заголовок: | #include <QGeoPositionInfoSource> |
| qmake: | QT += positioning |
| С версии: | Qt 5.2 |
| Наследует: | QObject |
| Наследуется от: |
Этот класс был представлен в Qt 5.2.
Типы публичного доступа
| перечисление | Ошибка { ОшибкаДоступа, ОшибкаЗакрытия, НетОшибок, ОшибкаНеизвестногоИсточника } |
| перечисление | МетодОпределенияПозиции { НетМетодовОпределенияПозиции, МетодыОпределенияПозицииПоСпутниковымДанным, МетодыОпределенияПозицииБезИспользованияСпутников, ВсеМетодыОпределенияПозиции } |
| флаги | МетодыОпределенияПозиции |
Свойства
- минимальныйИнтервалОбновления : const int
- имяИсточника : const QString
- интервалОбновления : int
Публичные функции
| QGeoPositionInfoSource(QObject *parent) | |
| виртуальный | ~QGeoPositionInfoSource() |
| QVariant | backendProperty(const QString &name) const |
| виртуальный QGeoPositionInfoSource::Ошибка | ошибка() const = 0 |
| виртуальный QGeoPositionInfo | последнееИзвестноеПоложение(bool fromSatellitePositioningMethodsOnly = false) const = 0 |
| виртуальный int | минимальныйИнтервалОбновления() const = 0 |
| QGeoPositionInfoSource::МетодыОпределенияПозиции | предпочитаемыеМетодыОпределенияПозиции() const |
| bool | setBackendProperty(const QString &name, const QVariant &value) |
| виртуальный void | установитьПредпочитаемыеМетодыОпределенияПозиции(QGeoPositionInfoSource::МетодыОпределенияПозиции methods) |
| виртуальный void | установитьИнтервалОбновления(int msec) |
| QString | имяИсточника() const |
| виртуальный QGeoPositionInfoSource::МетодыОпределенияПозиции | поддерживаемыеМетодыОпределенияПозиции() const = 0 |
| int | интервалОбновления() const |
Слот публичного доступа
| виртуальный void | запросОбновления(int timeout = 0) = 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 является типом-псевдонимом для 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 = 0)
Попытка получить текущее местоположение и сгенерировать 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 используется при запросе разрешения на использование служб геолокации всякий раз, когда приложение запущено (как на переднем плане, так и на заднем).
[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 = false) 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.15/qgeopositioninfosource.html