QGeoAreaMonitorSource Class
QGeoAreaMonitorSource 类可检测指定坐标集的邻近性变化。更多
Header: | #include <QGeoAreaMonitorSource> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Positioning) target_link_libraries(mytarget PRIVATE Qt6::Positioning) |
qmake: | QT += positioning |
继承: | QObject |
公共类型
enum | AreaMonitorFeature { PersistentAreaMonitorFeature, AnyAreaMonitorFeature } |
flags | AreaMonitorFeatures |
enum | 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 |
(since 6.2) 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 |
(since 6.2) 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*监视器 =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))); QGeoAreaMonitorInfobigBen("Big Ben"); QGeoCoordinateposition(51.50104, -0.124632); bigBen.setArea(QGeoCircle(position, 100)); monitor->startMonitoring(bigBen); }else{ qDebug() << "Could not create default area monitor"; } }publicQ_SLOTS:voidareaEntered(constQGeoAreaMonitorInfo常量QGeoPositionInfo更新) { Q_UNUSED(mon); qDebug() << "Now within 100 meters, current position is" << update.coordinate(); }voidareaExited(constQGeoAreaMonitorInfo常量QGeoPositionInfo&update) { Q_UNUSED(mon); qDebug() << "No longer within 100 meters, current position is" << update.coordinate(); }
QGeoAreaMonitorSource
遵循单例模式。具有相同 () 的每个类实例共享同一个区域监控后台。如果通过 () 或 () 添加了新的 对象,则该类的另一个实例也可以检索该对象(前提是它们来自同一个区域监控提供程序插件)。同样的单例模式也适用于该类使用的 实例。以下代码片段强调了这一行为:sourceName startMonitoring requestUpdate QGeoAreaMonitorInfo QGeoPositionInfoSource
QGeoAreaMonitorSource *s1 = QGeoAreaMonitorSource::createSource("blah", this); QGeoAreaMonitorSource *s2 = QGeoAreaMonitorSource::createSource("blah", this); QVERIFY(s1->positionInfoSource() == s2->positionInfoSource);
成员类型文档
enum QGeoAreaMonitorSource::AreaMonitorFeature
flagsQGeoAreaMonitorSource::AreaMonitorFeatures
定义区域监控功能的类型。
常量 | 值 | 描述 |
---|---|---|
QGeoAreaMonitorSource::PersistentAreaMonitorFeature | 0x00000001 | QGeoAreaMonitorInfo 区域监控器可以使实例持久化。即使管理监控器的应用程序不运行,持久监控器也会继续处于活动状态。 |
QGeoAreaMonitorSource::AnyAreaMonitorFeature | 0xffffffff | 匹配所有可能的区域监控功能。 |
AreaMonitorFeatures 类型是QFlags<AreaMonitorFeature> 的类型定义。它存储 AreaMonitorFeature 值的 OR 组合。
enum QGeoAreaMonitorSource::Error
定义了定位方法的类型。
错误枚举表示可能发生的错误。
常量 | 值 | 说明 |
---|---|---|
QGeoAreaMonitorSource::AccessError | 0 | 由于应用程序缺乏所需的权限,与远程区域监控后端的连接设置失败。 |
QGeoAreaMonitorSource::InsufficientPositionInfo | 1 | 区域监控源无法检索位置固定值,或者固定值的精确度不够高,无法提供有效的区域监控。 |
QGeoAreaMonitorSource::NoError | 3 | 未发生错误。 |
QGeoAreaMonitorSource::UnknownSourceError | 2 | 发生不明错误。 |
成员函数文档
[explicit]
QGeoAreaMonitorSource::QGeoAreaMonitorSource(QObject *parent)
使用给定的parent 创建监控源。
[virtual noexcept]
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 。
[signal]
void QGeoAreaMonitorSource::areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
当当前位置从活动monitor 以外的位置移动到监控区域内的位置时发出。
update 保持新位置。
[signal]
void QGeoAreaMonitorSource::areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
当当前位置从活动monitor 内的位置移动到监控区域外的位置时发出。
update 保持新位置。
[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)
通过加载名为sourceName 的插件,用给定的parent 创建并返回一个监视器源。
如果找不到插件,则返回nullptr
。
[pure virtual]
QGeoAreaMonitorSource::Error QGeoAreaMonitorSource::error() const
返回上次发生的错误类型。
注: 自 Qt6 起,在调用startMonitoring() 或requestUpdate() 时,最后一次错误总是会被重置。
[signal]
void QGeoAreaMonitorSource::errorOccurred(QGeoAreaMonitorSource::Error areaMonitoringError)
该信号在发生错误后发出。areaMonitoringError 参数描述了发生错误的类型。
[signal]
void QGeoAreaMonitorSource::monitorExpired(const QGeoAreaMonitorInfo &monitor)
当monitor 过期时发出。过期的区域监控器会自动从activeMonitors() 列表中删除。
另请参阅 activeMonitors() 。
[virtual]
QGeoPositionInfoSource *QGeoAreaMonitorSource::positionInfoSource() const
返回此QGeoAreaMonitorSource 对象当前使用的QGeoPositionInfoSource 。如果没有设置其他对象,函数将返回QGeoPositionInfoSource::createDefaultSource() 。
如果连默认的QGeoPositionInfoSource 都不存在,函数将返回nullptr
。
在使用返回的QGeoPositionInfoSource 实例时,应考虑到该实例可能位于不同的线程中。
另请参阅 QGeoPositionInfoSource 和setPositionInfoSource()。
[pure virtual]
bool QGeoAreaMonitorSource::requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal)
启用单次区域监控。monitor 的区域监控将一直执行,直到该QGeoAreaMonitorSource 实例首次发射signal 。一旦发出信号,monitor 将自动从activeMonitors() 列表中删除。如果monitor 无效或有效期已过,该函数将返回false
。
QGeoAreaMonitor singleShotMonitor; QGeoAreaMonitorSource * source = QGeoAreaMonitorSource::createDefaultSource(this); //... bool ret = source->requestUpdate(singleShotMonitor, SIGNAL(areaExited(QGeoAreaMonitor,QGeoPositionInfo)));
一旦首次发出areaExited() 信号,上述singleShotMonitor
对象将停止发送更新。在此之前,任何其他信号都可能根据区域上下文发送零次或多次。
不可能同时为同一监控对象的多个信号请求更新。对该函数的最后一次调用将决定停止继续更新的信号。在此阶段,只有areaEntered() 和areaExited() 信号可用于终止监控进程。
如果区域监控后端不支持QGeoAreaMonitorSource::PersistentAreaMonitorFeature ,则请求对QGeoAreaMonitorSource 实例进行持续监控将失败。
如果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)
设置此QGeoAreaMonitorSource 对象使用的新QGeoPositionInfoSource 。区域监控后台将成为newSource 新的QObject 父对象。之前的QGeoPositionInfoSource 对象将被删除。基于同一sourceName() 的所有QGeoAreaMonitorSource 实例共享同一QGeoPositionInfoSource 实例。
当需要操纵区域监控引擎使用的定位系统时,这可能会很有用。
请注意,所有权必须由QGeoAreaMonitorSource 的子类负责。由于该类背后的单例模式,newSource 可能会被转移到新的线程中。
另请参阅 positionInfoSource() 。
QString QGeoAreaMonitorSource::sourceName() const
返回正在使用的区域监控源实现的唯一名称。
该名称也可传递给createSource() 以创建特定区域监控源实现的新实例。
[pure virtual]
bool QGeoAreaMonitorSource::startMonitoring(const QGeoAreaMonitorInfo &monitor)
如果可以成功启动对monitor 的监控,则返回true
;否则返回false
。无法启动监控的原因可能是没有适当的默认位置信息源,也没有通过setPositionInfoSource() 设置替代QGeoPositionInfoSource 。
如果monitor 已经激活,现有的监控对象将被新的monitor 引用所取代。QGeoAreaMonitorInfo 实例的识别通过QGeoAreaMonitorInfo::identifier() 进行。因此,该函数也可用于更新活动监视器。
如果monitor 的有效期已过,则此函数将返回 false。对于已通过requestUpdate() 注册的单次监控程序,调用此函数可将监控程序切换到永久监控模式。
如果区域监控后端不支持QGeoAreaMonitorSource::PersistentAreaMonitorFeature ,则请求对QGeoAreaMonitorSource 实例进行永久监控将失败。
注: 自 Qt6 起,此方法在开始监控前总是将最后一个错误重置为NoError 。
另请参阅 stopMonitoring() 。
[pure virtual]
bool QGeoAreaMonitorSource::stopMonitoring(const QGeoAreaMonitorInfo &monitor)
如果monitor 已成功从activeMonitors() 的列表中删除,则返回 true;否则返回 false。此行为与monitor 是通过startMonitoring() 还是requestUpdate() 注册无关。
[pure virtual]
QGeoAreaMonitorSource::AreaMonitorFeatures QGeoAreaMonitorSource::supportedAreaMonitorFeatures() const
返回该信号源可用的区域监控功能。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.