Класс QGeoPositionInfoSource
Класс QGeoPositionInfoSource — это абстрактный базовый класс для распространения обновлений местоположения. Подробнее...
| Заголовок: | #include <QGeoPositionInfoSource> |
| qmake: | QT += positioning |
| С момента: | Qt 5.2 |
| Наследует: | QObject |
| Наследуется от: |
Типы
| перечисление | Ошибка { ОшибкаДоступа, ОшибкаЗакрытия, БезОшибок, ОшибкаНеизвестногоИсточника } |
| перечисление | МетодПозиционирования { НетМетодовПозиционирования, МетодыПозиционированияПоСателлитам, МетодыПозиционированияНеПоСателлитам, ВсеМетодыПозиционирования } |
| флаги | МетодыПозиционирования |
Свойства
- минимальныйИнтервалОбновления : const int
- имяИсточника : const QString
- интервалОбновления : int
- 1 свойство унаследовано от QObject
Открытые функции
| QGeoPositionInfoSource(QObject *родитель) | |
| виртуальный | ~QGeoPositionInfoSource() |
| виртуальный QGeoPositionInfoSource::Ошибка | ошибка() const = 0 |
| виртуальный QGeoPositionInfo | последнееИзвестноеПоложение(bool толькоИзМетодовПозиционированияПоСателлитам = ...) const = 0 |
| виртуальный int | минимальныйИнтервалОбновления() const = 0 |
| QGeoPositionInfoSource::МетодыПозиционирования | предпочитаемыеМетодыПозиционирования() const |
| виртуальный void | установитьПредпочитаемыеМетодыПозиционирования(QGeoPositionInfoSource::МетодыПозиционирования методы) |
| виртуальный void | установитьИнтервалОбновления(int мс) |
| QString | имяИсточника() const |
| виртуальный QGeoPositionInfoSource::МетодыПозиционирования | поддерживаемыеМетодыПозиционирования() const = 0 |
| int | интервалОбновления() const |
- 31 открытая функция унаследована от QObject
Открытые слоты
| виртуальный void | запроситьОбновление(int таймаут = ...) = 0 |
| виртуальный void | начатьОбновления() = 0 |
| виртуальный void | остановитьОбновления() = 0 |
- 1 открытый слот унаследован от QObject
Сигналы
| void | ошибка(QGeoPositionInfoSource::Ошибка ошибкаПозиционирования) |
| void | обновлениеПозиции(const QGeoPositionInfo &обновление) |
| void | изменилисьПоддерживаемыеМетодыПозиционирования() |
| void | таймаутОбновления() |
- 2 сигнала унаследованы от QObject
Статические открытые члены
| QStringList | доступныеИсточники() |
| QGeoPositionInfoSource * | создатьИсточикПоУмолчанию(QObject *родитель) |
| QGeoPositionInfoSource * | создатьИсточник(const QString &имяИсточника, QObject *родитель) |
| const QMetaObject | staticMetaObject |
- 9 статических открытых членов унаследованы от QObject
Дополнительные унаследованные члены
- 9 защищенных функций унаследованы от QObject
Подробное описание
Класс QGeoPositionInfoSource — это абстрактный базовый класс для распространения обновлений местоположения.
Статическая функция 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 или позиционирование на основе WiFi. |
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.
[virtual] QGeoPositionInfoSource::~QGeoPositionInfoSource()
Уничтожает источник позиционирования.
[static] QStringList QGeoPositionInfoSource::availableSources()
Возвращает список доступных плагинов источника. Это включает в себя любой плагин по умолчанию для текущей платформы.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, который считывает данные о местоположении из системных источников по умолчанию или плагин с наивысшим приоритетом.
Возвращает 0, если система не имеет источника позиционирования по умолчанию, не удалось найти допустимые плагины или у пользователя нет разрешения на доступ к текущему местоположению.
[static] QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sourceName, QObject *parent)
Создаёт и возвращает источник позиционирования с заданным parent, загружая плагин с именем sourceName.
Возвращает 0, если плагин не найден.
[pure virtual] QGeoPositionInfoSource::Error QGeoPositionInfoSource::error() const
Возвращает тип последней ошибки.
[signal] void QGeoPositionInfoSource::error(QGeoPositionInfoSource::Error positioningError)
Этот сигнал генерируется после возникновения ошибки. Параметр positioningError описывает тип произошедшей ошибки.
Этот сигнал не генерируется при возникновении updateTimeout().
Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию, как показано в этом примере:
connect(geoPositionInfoSource, QOverload<QGeoPositionInfoSource::Error>::of(&QGeoPositionInfoSource::error),
[=](QGeoPositionInfoSource::Error positioningError){ /* ... */ });
[pure virtual] QGeoPositionInfo QGeoPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly = ...) const
Возвращает обновление, содержащее последнее известное местоположение, или пустое обновление, если оно недоступно.
Если fromSatellitePositioningMethodsOnly имеет значение true, возвращается последнее известное местоположение, полученное от метода спутникового позиционирования; если оно недоступно, возвращается пустое обновление.
[signal] void QGeoPositionInfoSource::positionUpdated(const QGeoPositionInfo &update)
Если вызывается startUpdates() или requestUpdate(), этот сигнал генерируется, когда становится доступно обновление.
Значение update содержит значение нового обновления.
QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::preferredPositioningMethods() const
Возвращает методы позиционирования, заданные методом setPreferredPositioningMethods().
См. также setPreferredPositioningMethods().
[pure virtual slot] void QGeoPositionInfoSource::requestUpdate(int timeout = ...)
Попытка получить текущее местоположение и вывести positionUpdated() с этой информацией. Если текущее местоположение не может быть найдено в течение заданного timeout (в миллисекундах), или если timeout меньше значения, возвращённого minimumUpdateInterval(), генерируется updateTimeout().
Если таймаут равен нулю, он устанавливается по умолчанию в разумный период ожидания, соответствующий источнику.
Это ничего не делает, если в данный момент уже выполняется другой запрос обновления. Однако его можно вызывать, даже если startUpdates() уже был вызван и в настоящее время выполняются регулярные обновления.
Если источник использует несколько методов позиционирования, он пытается получить текущее местоположение с помощью наиболее точного метода позиционирования в течение заданного таймаута.
[virtual] void QGeoPositionInfoSource::setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods)
Устанавливает предпочтительные методы позиционирования для этого источника в methods.
Если methods включает метод, который не поддерживается источником, этот метод будет проигнорирован.
Если methods не включает ни одного доступного/поддерживаемого источником метода, предпочтительные методы будут установлены в набор методов, которые доступны для источника. Если у источника нет доступных методов (например, из-за выключения службы местоположения или отсутствия службы местоположения), заданные methods принимаются как есть.
Примечание: При переопределении этого метода подклассы должны вызывать базовый метод, чтобы preferredPositioningMethods() возвращал правильное значение.
См. также preferredPositioningMethods() и supportedPositioningMethods().
[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()
Останавливает выпуск обновлений с регулярными интервалами.
[pure virtual] QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::supportedPositioningMethods() const
Возвращает доступные методы определения местоположения для этого источника. Доступность определяется как возможность использования на момент вызова этой функции. Поэтому такие пользовательские настройки, как отключенные службы определения местоположения или ограничения на поставщиков спутниковой позиции, отражаются этой функцией. События о изменениях состояния можно получить через supportedPositioningMethodsChanged().
Не все платформы различают различные методы определения местоположения или сообщают о текущей конфигурации пользователя устройства. В следующей таблице представлен обзор текущей ситуации на платформах:
| Платформа | Краткое описание |
|---|---|
| Android | Статус отдельных поставщиков и общее состояние службы определения местоположения известны и сообщаются при активной службе определения местоположения. |
| GeoClue | Захардкожено всегда возвращать AllPositioningMethods. |
| GeoClue2 | Отдельные поставщики не различимы, но отражаются отключенные службы определения местоположения. |
| iOS/tvOS | Захардкожено всегда возвращать AllPositioningMethods. |
| macOS | Захардкожено всегда возвращать AllPositioningMethods. |
| Windows (UWP) | Отдельные поставщики не различимы, но отражаются отключенные службы определения местоположения. |
См. также supportedPositioningMethodsChanged() и setPreferredPositioningMethods().
[signal] void QGeoPositionInfoSource::supportedPositioningMethodsChanged()
Этот сигнал генерируется при изменении поддерживаемых методов определения местоположения. Причиной изменения может быть включение/выключение пользователем служб определения местоположения или ограничение служб определения местоположения определенными типами (например, только GPS). Обратите внимание, что изменения поддерживаемых методов определения местоположения могут не быть обнаружены на всех платформах. supportedPositioningMethods() предоставляет обзор текущей поддержки платформы.
Эта функция была добавлена в Qt 5.12.
[signal] void QGeoPositionInfoSource::updateTimeout()
Если был вызван requestUpdate(), этот сигнал будет выпущен, если текущая позиция не была получена в течение указанного времени ожидания.
Если был вызван startUpdates(), этот сигнал будет выпущен, если этот подкласс QGeoPositionInfoSource определит, что он не сможет предоставлять дальнейшие регулярные обновления. Этот сигнал не будет выпущен повторно до возобновления регулярных обновлений.
Хотя срабатывание этого сигнала можно рассматривать как условие ошибки, это не подразумевает выпуск сигнала error(). Требуется только выпуск сигнала updateTimeout() для указания таймаута.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qgeopositioninfosource.html