QGeoAreaMonitorSource 类
QGeoAreaMonitorSource 类可以检测指定坐标组的接近度变化。 更多...
头文件 | #include <QGeoAreaMonitorSource> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Positioning) target_link_libraries(mytarget PRIVATE Qt6::Positioning) |
qmake | QT += positioning |
继承 | QObject |
公共类型
枚举 | AreaMonitorFeature { PersistentAreaMonitorFeature, AnyAreaMonitorFeature } |
标志 | AreaMonitorFeatures |
枚举 | Error { AccessError, InsufficientPositionInfo, NoError, UnknownSourceError } |
公共函数
QGeoAreaMonitorSource(QObject *parent) | |
虚拟 | ~QGeoAreaMonitorSource() |
虚拟 QList<QGeoAreaMonitorInfo> | activeMonitors() const = 0 |
虚拟 QList<QGeoAreaMonitorInfo> | activeMonitors(const QGeoShape &lookupArea) const = 0 |
(since 6.2) 虚拟 QVariant | backendProperty(const QString &name) const |
虚拟 QGeoAreaMonitorSource::Error | error() const = 0 |
虚拟 QGeoPositionInfoSource * | positionInfoSource() const |
虚拟 bool | requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0 |
(since 6.2) 虚拟 bool | setBackendProperty(const QString &name, const QVariant &value) |
虚拟 void | setPositionInfoSource(QGeoPositionInfoSource *newSource) |
QString | sourceName() const |
虚拟 bool | startMonitoring(const QGeoAreaMonitorInfo &monitor) = 0 |
虚拟 bool | stopMonitoring(const QGeoAreaMonitorInfo &monitor) = 0 |
虚拟 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) |
详细描述
A QGeoAreaMonitorSource 在当前位置在指定区域范围内或移动出范围时发出信号。每个区域都由一个 QGeoAreaMonitorInfo 对象指定。例如
public: MyClass() : QObject() { QGeoAreaMonitorSource *monitor = 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))); QGeoAreaMonitorInfo bigBen("Big Ben"); QGeoCoordinate position(51.50104, -0.124632); bigBen.setArea(QGeoCircle(position, 100)); monitor->startMonitoring(bigBen); } else { qDebug() << "Could not create default area monitor"; } } public Q_SLOTS: void areaEntered(const QGeoAreaMonitorInfo &mon, const QGeoPositionInfo &update) { Q_UNUSED(mon); qDebug() << "Now within 100 meters, current position is" << update.coordinate(); } void areaExited(const QGeoAreaMonitorInfo &mon, const 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
flags QGeoAreaMonitorSource::AreaMonitorFeatures
定义区域监控能力的类型。
常量 | 值 | 描述 |
---|---|---|
QGeoAreaMonitorSource::PersistentAreaMonitorFeature | 0x00000001 | QGeoAreaMonitorInfo 实例可以持久化。持久监视器即使在管理监视器的应用程序未运行时也会继续活动。 |
QGeoAreaMonitorSource::AnyAreaMonitorFeature | 0xffffffff | 与所有可能的区域监控功能匹配。 |
AreaMonitorFeatures 类型是 QFlags<AreaMonitorFeature> 的 typedef。它存储 AreaMonitorFeature 值的 OR 组合。
enum QGeoAreaMonitorSource::Error
定义定位方法类型。
Error 枚举表示可能发生的错误。
常量 | 值 | 描述 |
---|---|---|
QGeoAreaMonitorSource::AccessError | 0 | 由于应用程序缺少所需的权限,远程区域监控后端连接设置失败。 |
QGeoAreaMonitorSource::InsufficientPositionInfo | 1 | 区域监控源无法获取位置修复或修复的精度不足以提供有效的区域监控。 |
QGeoAreaMonitorSource::NoError | 3 | 未发生错误。 |
QGeoAreaMonitorSource::UnknownSourceError | 2 | 发生了未识别的错误。 |
成员函数文档
[显式]
QGeoAreaMonitorSource::QGeoAreaMonitorSource(QObject *parent)
创建具有指定 parent 的监控源。
[虚拟 noexcept]
QGeoAreaMonitorSource::~QGeoAreaMonitorSource()
销毁监控源。
[纯虚]
QList<QGeoAreaMonitorInfo> QGeoAreaMonitorSource::activeMonitors() const
返回已知于 QGeoAreaMonitorSource 对象的所有活动监控器的列表。
通过startMonitoring()启动了一个活动监视器。对于每个活动监视器,源对象都会发出所需的信号,例如areaEntered()或areaExited()。同一应用程序中的多个QGeoAreaMonitorSource实例共享相同的活动监视器对象。
除非活动的QGeoAreaMonitorInfo具有isPersistent(),否则一旦当前应用程序终止,活动的QGeoAreaMonitorInfo将会停止。
[纯虚函数]
QList<QGeoAreaMonitorInfo> QGeoAreaMonitorSource::activeMonitors(const QGeoShape &lookupArea) const
返回QGeoAreaMonitorSource对象认识的所有活动监视器的列表,其中心位于lookupArea内。如果lookupArea为空,则返回的列表将为空。
通过startMonitoring()启动了一个活动监视器。对于每个活动监视器,源对象都会发出所需的信号,例如areaEntered()或areaExited()。同一应用程序中的多个QGeoAreaMonitorSource实例共享相同的活动监视器对象。
除非活动的QGeoAreaMonitorInfo具有isPersistent(),否则一旦当前应用程序终止,活动的QGeoAreaMonitorInfo将会停止。
另请参阅QGeoShape。
[信号]
void QGeoAreaMonitorSource::areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
当当前位置从活动监视器外移动到监控区域内部时发出。
update包含新的位置。
[信号]
void QGeoAreaMonitorSource::areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update)
当当前位置从一个活动监视器内部移动到监控区域外部时发出。
update包含新的位置。
[静态]
QStringList QGeoAreaMonitorSource::availableSources()
返回可用监视插件列表,如果可用,包括默认的系统后端。
[虚函数,自6.2版本]
QVariant QGeoAreaMonitorSource::backendProperty(const QString &name) const
如果存在,返回名为name的后端特定属性值。否则返回的值将是无效的。
此函数自Qt 6.2版本引入。
另请参阅setBackendProperty。
[静态]
QGeoAreaMonitorSource *QGeoAreaMonitorSource::createDefaultSource(QObject *parent)
创建并返回一个给定parent的监视器源,该监视器源使用底层系统上的资源监控区域。
如果没有系统支持位置监控,则返回nullptr
。
[静态]
QGeoAreaMonitorSource *QGeoAreaMonitorSource::createSource(const QString &sourceName, QObject *parent)
创建并返回一个具有指定parent的监视源,通过加载名为sourceName的插件。
如果找不到插件,则返回nullptr
。
[纯虚函数]
QGeoAreaMonitorSource::Error QGeoAreaMonitorSource::error() const
返回最后一次发生的错误类型。
注意:从Qt6开始,在调用startMonitoring()或requestUpdate()时,总是重置最后错误。
[信号]
void QGeoAreaMonitorSource::errorOccurred(QGeoAreaMonitorSource::Error areaMonitoringError)
此信号在错误发生后被触发。参数areaMonitoringError描述了错误的类型。
[信号]
void QGeoAreaMonitorSource::monitorExpired(const QGeoAreaMonitorInfo &monitor)
当monitor过期时触发。过期的区域监视器将自动从activeMonitors()的列表中删除。
另请参阅:activeMonitors().
[虚函数]
QGeoPositionInfoSource *QGeoAreaMonitorSource::positionInfoSource() const
返回当前用于此QGeoAreaMonitorSource对象的QGeoPositionInfoSource。如果没有设置其他对象,此函数将返回QGeoPositionInfoSource::createDefaultSource()。
如果甚至不存在默认的QGeoPositionInfoSource,则函数返回nullptr
。
返回的QGeoPositionInfoSource实例的任何使用都应考虑到它可能位于不同的线程中。
另请参阅:QGeoPositionInfoSource和setPositionInfoSource().
[纯虚函数]
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 实例请求持续监控失败,表明区域监控后端不支持QGeoAreaMonitorSource::PersistentAreaMonitorFeature。
如果monitor 已通过 startMonitoring() 注册,它将被转换为单次行为。
注意:由于 Qt6 的改动,此方法在开始监控之前始终将最后一个错误重置为NoError。
另请参阅:startMonitoring() 和 stopMonitoring()。
[虚拟,自6.2起]
bool QGeoAreaMonitorSource::setBackendProperty(const QString &名字, const QVariant &值)
将名为 名字 的后端特定属性设置为 值。成功时返回 true
,否则返回 false
。后端特定属性可用于在运行时配置区域监控子系统的行为。
此函数自Qt 6.2版本引入。
另请参阅:backendProperty。
[虚拟]
void QGeoAreaMonitorSource::setPositionInfoSource(QGeoPositionInfoSource *新源)
设置新的 QGeoPositionInfoSource,该源将被此 QGeoAreaMonitorSource 对象使用。区域监控后端成为 新源 的新 QObject 父对象。之前的 QGeoPositionInfoSource 对象将被删除。所有基于相同 源名称 的 QGeoAreaMonitorSource 实例共享相同的 QGeoPositionInfoSource 实例。
在希望操作区域监控引擎使用的定位系统时,这可能很有用。
注意,必须由 QGeoAreaMonitorSource 的子类负责所有权。由于此类背后的单例模式,新源 可能会被移动到一个新的线程。
另请参阅:positionInfoSource。
QString QGeoAreaMonitorSource::源名称() const
返回正在使用的区域监控源实现的唯一名称。
这是可以将此名称传递给 createSource() 以创建特定区域监控源实现新实例的同一名。
[纯虚]
bool QGeoAreaMonitorSource::startMonitoring(const QGeoAreaMonitorInfo &监控器)
如果 监控器 的监控成功启动,返回 true
;否则返回 false
。无法启动监控的原因可能是没有设置替代 QGeoPositionInfoSource,同时默认位置信息源不可用。
如果 监控器 已经激活,现有的监控器对象将被新的 监控器 引用所替换。通过 QGeoAreaMonitorInfo 实例的 QGeoAreaMonitorInfo::identifier() 进行标识。因此,这个函数也可以用来更新活跃的监控器。
如果 监控器 已经过期,则此函数返回 false。为此请求更新 (requestUpdate()) 注册的单次监控器将监控器切换到永久监控模式。
如果QGeoAreaMonitorSource 实例请求持续监控失败,表明区域监控后端不支持QGeoAreaMonitorSource::PersistentAreaMonitorFeature。
注意:由于 Qt6 的改动,此方法在开始监控之前始终将最后一个错误重置为NoError。
另请参阅stopMonitoring。
[纯虚函数]
bool QGeoAreaMonitorSource::stopMonitoring(const QGeoAreaMonitorInfo &监控器)
如果成功从 activeMonitors () 列表中删除 监控器,则返回 true;否则返回 false。此行为与 监控器 是否通过 startMonitoring() 或 requestUpdate() 注册无关。
[纯虚函数]
QGeoAreaMonitorSource::AreaMonitorFeatures QGeoAreaMonitorSource::supportedAreaMonitorFeatures() const
返回此源可用的区域监控功能。
© 2024 Qt 公司。此处包含的文档贡献者是各自所有者的版权。此处提供的文档根据自由软件基金会的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及其相应的标志是芬兰 Qt 公司的商标,以及/或全球其他国家的商标。所有其他商标均为各自所有者的财产。