Класс QGeoPositionInfoSource
Класс QGeoPositionInfoSource — это абстрактный базовый класс для распространения обновлений местоположения. Подробнее...
| Заголовок: | #include <QGeoPositionInfoSource> |
| CMake: | find_package(Qt6 COMPONENTS Positioning REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Positioning) |
| qmake: | QT += positioning |
| С момента: | Qt 5.2 |
| Наследует: | QObject |
| Наследуется: |
Типы публичного доступа
| перечисление | Ошибка { ОшибкаДоступа, ОшибкаЗакрытия, НетОшибок, ОшибкаНеизвестногоИсточника, ОшибкаТаймаутаОбновления } |
| перечисление | МетодОпределенияМестоположения { НетМетодовОпределенияМестоположения, МетодыОпределенияМестоположенияПоСпутникам, МетодыОпределенияМестоположенияБезСпутников, ВсеМетодыОпределенияМестоположения } |
| флаги | МетодыОпределенияМестоположения |
Свойства
- минимальныйИнтервалОбновления : 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 | изменилисьПоддерживаемыеМетодыОпределенияМестоположения() |
Статические члены публичного доступа
| 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::создатьОпределенныйПоУмолчаниюИсточник() создает источник местоположения по умолчанию, соответствующий платформе, если он доступен. В противном случае QGeoPositionInfoSource проверит наличие доступных плагинов, реализующих интерфейс QGeoPositionInfoSourceFactory.
Пользователи подкласса QGeoPositionInfoSource могут запросить текущее местоположение с помощью запроситьОбновление(), или начать и остановить регулярные обновления местоположения с помощью начатьОбновления() и остановитьОбновления(). Когда обновление доступно, генерируется сигнал местоположениеОбновлено(). Последнее известное местоположение можно получить с помощью последнееИзвестноеМестоположение().
Если требуются регулярные обновления местоположения, можно использовать установитьИнтервалОбновления(), чтобы указать, как часто должны генерироваться эти обновления. Если интервал не указан, обновления предоставляются всякий раз, когда они становятся доступными. Например:
// Emit updates every 10 seconds if available
QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(0);
if (source)
source->setUpdateInterval(10000); Чтобы удалить ранее установленный интервал обновления, вызовите установитьИнтервалОбновления() со значением 0.
Примечание: Источник местоположения может иметь минимальное требование к интервалу обновлений, возвращаемое минимальныйИнтервалОбновления().
Примечание: Чтобы использовать этот класс из сервиса Android, см. Qt Positioning на Android.
Документация по типам членов
перечисление QGeoPositionInfoSource::Ошибка
Перечисление Error представляет ошибки, которые могут возникнуть.
| Константа | Значение | Описание |
|---|---|---|
QGeoPositionInfoSource::AccessError |
0 |
Настройка соединения с удалённым бэкендом позиционирования не удалась, так как у приложения не было необходимых привилегий. |
QGeoPositionInfoSource::ClosedError |
1 |
Удаленный бэкенд позиционирования закрыл соединение, что происходит, например, в случае, если пользователь переключает службы местоположения в выключенное состояние. Как только служба местоположения будет снова включена, обычные обновления возобновятся. |
QGeoPositionInfoSource::NoError |
3 |
Ошибка не произошла. |
QGeoPositionInfoSource::UnknownSourceError |
2 |
Произошла неопознанная ошибка. |
QGeoPositionInfoSource::UpdateTimeoutError (since Qt 6.2) |
4 |
Если был вызван метод requestUpdate(), эта ошибка указывает, что текущее местоположение не удалось получить в течение заданного времени ожидания. Если был вызван метод startUpdates(), эта ошибка указывает, что этот подкласс QGeoPositionInfoSource определил, что не сможет предоставлять дальнейшие регулярные обновления. В последнем случае ошибка не будет снова генерироваться до тех пор, пока регулярные обновления не возобновятся. |
Перечисление QGeoPositionInfoSource::PositioningMethodфлаги QGeoPositionInfoSource::PositioningMethods
Определяет типы методов позиционирования.
| Константа | Значение | Описание |
|---|---|---|
QGeoPositionInfoSource::NoPositioningMethods |
0x00000000 |
Ни один из методов позиционирования. |
QGeoPositionInfoSource::SatellitePositioningMethods |
0x000000ff |
Методы позиционирования на основе спутников, такие как GPS или GLONASS. |
QGeoPositionInfoSource::NonSatellitePositioningMethods |
0xffffff00 |
Другие методы позиционирования, такие как идентификатор ячейки 3GPP или позиционирование на основе WiFi. |
QGeoPositionInfoSource::AllPositioningMethods |
0xffffffff |
Методы позиционирования на основе спутников, как только они будут доступны. В противном случае методы, не основанные на спутниках. |
Тип PositioningMethods является псевдонимом для QFlags<PositioningMethod>. Он хранит логическое ИЛИ сочетание значений PositioningMethod.
Документация по свойствам
[read-only] минимальноеВремяОбновления : const int
Это свойство содержит минимальное время (в миллисекундах), необходимое для получения обновления местоположения.
Это минимальное значение, принимаемое методами setUpdateInterval() и requestUpdate().
Функции доступа:
| virtual int | минимальноеВремяОбновления() const = 0 |
[bindable] предпочитаемыеМетодыПозиционирования : PositioningMethods
Примечание: Это свойство поддерживает привязки QProperty.
Устанавливает предпочтительные методы позиционирования для данного источника.
Если новые методы включают метод, который не поддерживается источником, этот метод будет проигнорирован.
Если новые методы не включают ни одного метода, доступного/поддерживаемого источником, предпочтительные методы будут установлены в набор методов, которые доступны для источника. Если у источника нет доступных методов (например, потому что служба местоположения выключена или он не предлагает службу местоположения), переданные методы принимаются как есть.
Значение по умолчанию для этого свойства - NoPositioningMethods.
Примечание: Реализации подклассов должны вызывать базовый метод setPreferredPositioningMethods() для того, чтобы preferredPositioningMethods() возвращал правильное значение.
См. также supportedPositioningMethods().
[read-only] имяИсточника : const QString
Это свойство содержит уникальное имя реализации источника местоположения, используемого в данный момент.
Это то же имя, которое можно передать методу createSource() для создания нового экземпляра конкретной реализации источника местоположения.
Функции доступа:
| QString | имяИсточника() const |
[bindable] интервалОбновления : int
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит запрашиваемый интервал в миллисекундах между каждым обновлением.
Если интервал обновления не задан (или равен 0), источник будет предоставлять обновления так часто, как необходимо.
Если интервал обновления задан, источник будет предоставлять обновления с интервалом, как можно более близким к запрошенному интервалу. Если запрошенный интервал меньше, чем минимальноеВремяОбновления(), вместо этого используется минимальный интервал.
Изменения интервала обновления происходят так быстро, как это практически возможно, но время, необходимое для изменения, может варьироваться в зависимости от реализации. Также зависит от реализации, учитывается ли время, прошедшее с предыдущего интервала, как часть нового интервала.
Значение по умолчанию для этого свойства - 0.
Примечание: Реализации подклассов должны вызывать базовый метод setUpdateInterval() для того, чтобы updateInterval() возвращал правильное значение.
Примечание: Это свойство не может использоваться для настройки частоты обновления на iOS и macOS, поскольку их API не предоставляют такой возможности. В этих системах этот параметр используется только для установки UpdateTimeoutError и вызова сигнала errorOccurred, если обновление не получено в течение желаемого интервала.
Документация по членам-функциям
QGeoPositionInfoSource::QGeoPositionInfoSource(QObject *родитель)
Создаёт источник местоположения с указанным родителем.
[signal] void QGeoPositionInfoSource::возникновениеОшибки(QGeoPositionInfoSource::Ошибка positioningError)
Этот сигнал генерируется после возникновения ошибки. Параметр positioningError описывает тип произошедшей ошибки.
[signal] void QGeoPositionInfoSource::обновлениеМестоположения(const QGeoPositionInfo &обновление)
Если вызван метод startUpdates() или requestUpdate(), этот сигнал генерируется, когда доступно обновление.
Значение обновление содержит значение нового обновления.
[pure virtual slot] void QGeoPositionInfoSource::запросОбновления(int времяОжидания = 0)
Попытка получить текущее местоположение и вывести обновлениеМестоположения() с этой информацией. Если текущее местоположение не может быть найдено в течение заданного времяОжидания (в миллисекундах) или если времяОжидания меньше значения, возвращаемого минимальноеВремяОбновления(), генерируется сигнал возникновениеОшибки() с UpdateTimeoutError.
Если время ожидания равно нулю, время ожидания по умолчанию устанавливается на разумный период времени, соответствующий источнику.
Это ничего не делает, если в данный момент выполняется другой запрос обновления. Однако его можно вызвать даже в том случае, если startUpdates() уже был вызван и в настоящее время выполняются регулярные обновления.
Если источник использует несколько методов позиционирования, он пытается получить текущее местоположение из наиболее точного метода позиционирования в течение заданного времени ожидания.
Примечание: Начиная с Qt6, этот метод всегда сбрасывает последнюю ошибку на NoError перед запросом местоположения.
Примечание: Чтобы понять, как использовать этот метод из службы Android, см. Qt Positioning на Android.
[pure virtual slot] void QGeoPositionInfoSource::запуститьОбновления()
Начинает генерировать обновления с регулярными интервалами, как указано в setUpdateInterval().
Если setUpdateInterval() не был вызван, источник будет генерировать обновления, как только они появятся.
Сигнал возникновениеОшибки() с UpdateTimeoutError будет сгенерирован, если этот подкласс QGeoPositionInfoSource определит, что не сможет предоставлять регулярные обновления. Это может произойти, если спутниковое позиционирование потеряно или обнаружена аппаратная ошибка. Обновления местоположения будут возобновлены, если данные появятся позже. Ошибка UpdateTimeoutError не будет сгенерирована снова до тех пор, пока периодические обновления не возобновятся.
Примечание: Начиная с Qt6, этот метод всегда сбрасывает последнюю ошибку на NoError перед запуском обновлений.
Примечание: Чтобы понять, как использовать этот метод из сервиса Android, см. Qt Positioning на Android.
В iOS, начиная с версии 8, фреймворк Core Location требует дополнительных записей в файле Info.plist с ключами NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription и строкой, отображаемой в запросе на авторизацию. Ключ NSLocationWhenInUseUsageDescription используется при запросе разрешения на использование служб геолокации, когда приложение находится в фоновом режиме. Ключ NSLocationAlwaysUsageDescription используется при запросе разрешения на использование служб геолокации, когда приложение запущено (как в фоновом, так и в активном режиме). Если оба ключа определены, NSLocationWhenInUseUsageDescription имеет приоритет в режиме фонового приложения.
[pure virtual slot] void QGeoPositionInfoSource::stopUpdates()
Останавливает выброс обновлений с регулярными интервалами.
[signal, since Qt 5.12] void QGeoPositionInfoSource::supportedPositioningMethodsChanged()
Этот сигнал генерируется, когда изменились поддерживаемые методы позиционирования. Причиной изменения может быть включение/выключение пользователем служб геолокации или ограничение служб геолокации определенными типами (например, только GPS). Обратите внимание, что изменения поддерживаемых методов позиционирования не могут быть обнаружены на всех платформах. supportedPositioningMethods() предоставляет обзор текущей поддержки платформы.
Эта функция была введена в Qt 5.12.
[virtual] QGeoPositionInfoSource::~QGeoPositionInfoSource()
Уничтожает источник позиционирования.
[static] QStringList QGeoPositionInfoSource::availableSources()
Возвращает список доступных плагинов-источников. Это включает любой плагин-бекенд по умолчанию для текущей платформы.
[virtual, since Qt 5.14] QVariant QGeoPositionInfoSource::backendProperty(const QString &name) const
Возвращает значение свойства, специфичного для бэкенда, с именем name, если оно присутствует. В противном случае возвращаемое значение будет недействительным. Поддерживаемые свойства, специфичные для бэкенда, перечислены и описаны в Плагины Qt Positioning#Плагины по умолчанию.
Эта функция была введена в Qt 5.14.
См. также setBackendProperty.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, который считывает данные местоположения из системных источников по умолчанию или плагин с наивысшим приоритетом.
Возвращает nullptr если у системы нет источника позиционирования по умолчанию, не удалось найти валидные плагины или у пользователя нет разрешения на доступ к текущему местоположению.
[static, since Qt 5.14] 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.
Возвращает nullptr если плагин не найден.
[static, since Qt 5.14] 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
Возвращает тип последней произошедшей ошибки.
Примечание: Начиная с Qt6, последняя ошибка всегда сбрасывается при вызове startUpdates() или requestUpdate().
[pure virtual] QGeoPositionInfo QGeoPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const
Возвращает обновление, содержащее последнее известное положение, или пустое обновление, если таковое отсутствует.
Если fromSatellitePositioningMethodsOnly равно true, возвращает последнее известное положение, полученное с помощью метода позиционирования по спутникам; если таковое отсутствует, возвращает пустое обновление.
[virtual, since Qt 5.14] bool QGeoPositionInfoSource::setBackendProperty(const QString &name, const QVariant &value)
Устанавливает свойство, специфичное для бэкенда, с именем name, со значением value. Возвращает true при успехе, false в противном случае. Свойства, специфичные для бэкенда, могут использоваться для конфигурирования поведения подсистемы позиционирования во время выполнения. Поддерживаемые свойства, специфичные для бэкенда, перечислены и описаны в Плагины Qt Positioning#Плагины по умолчанию.
Эта функция была введена в Qt 5.14.
См. также backendProperty.
[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-6.2/qgeopositioninfosource.html