- class QGeoAreaMonitorSource#
QGeoAreaMonitorSource类启用对一组指定坐标的邻近变化检测。 更多…简介#
方法#
def
__init__()def
sourceName()
虚拟方法#
信号#
定义
areaExited()
静态函数#
注释
本文档可能包含从 C++ 自动转换为 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告诉我们。
详细描述#
警告
本节包含从 C++ 自动转换为 Python 的代码片段,可能包含错误。
QGeoAreaMonitorSource在当前位置处于指定区域范围内或已移出范围时发出信号。每个区域由一个QGeoAreaMonitorInfo对象指定。例如# public MyClass() : QObject() monitor = QGeoAreaMonitorSource.createDefaultSource(self) if monitor: connect(monitor, SIGNAL(areaEntered(QGeoAreaMonitorInfo,QGeoPositionInfo)), self, SLOT(areaEntered(QGeoAreaMonitorInfo,QGeoPositionInfo))) connect(monitor, SIGNAL(areaExited(QGeoAreaMonitorInfo,QGeoPositionInfo)), self, SLOT(areaExited(QGeoAreaMonitorInfo,QGeoPositionInfo))) bigBen = QGeoAreaMonitorInfo("Big Ben") position = QGeoCoordinate(51.50104, -0.124632) bigBen.setArea(QGeoCircle(position, 100)) monitor.startMonitoring(bigBen) else: print("Could not create default area monitor") public Q_SLOTS: def areaEntered(mon, update): Q_UNUSED(mon) print("Now within 100 meters, current position is", update.coordinate()) def areaExited(mon, update): Q_UNUSED(mon) print("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);
- class Error#
定义了定位方法的类型。
Error 枚举表示可能发生的错误。
常数
描述
QGeoAreaMonitorSource.AccessError
连接远程区域监控后端失败,因为应用程序缺乏所需的权限。
QGeoAreaMonitorSource.InsufficientPositionInfo
区域监控源无法检索位置修正或修正的精度不足以提供有效的区域监控。
QGeoAreaMonitorSource.NoError
没有发生错误。
QGeoAreaMonitorSource.UnknownSourceError
发生了未识别的错误。
- class AreaMonitorFeature#
(继承自
enum.Flag) 定义了区域监控能力的类型。常数
描述
QGeoAreaMonitorSource.PersistentAreaMonitorFeature
QGeoAreaMonitorInfo实例可以被持久化。持久化的监控器即使在管理监控器的应用程序不运行时也会继续活跃。QGeoAreaMonitorSource.AnyAreaMonitorFeature
匹配所有可能的区域监控功能。
创建一个具有给定
parent的监控源。- abstract activeMonitors()#
- 返回类型::
QGeoAreaMonitorInfo 对象的列表
返回所有活跃监控器列表,这些监控器由
QGeoAreaMonitorSource对象所知。通过
startMonitoring()启动了一个活跃监控器。对于每个活跃的监控器,源对象将发射所需的信号,例如areaEntered()或areaExited()。同一应用中的多个QGeoAreaMonitorSource实例共享相同的活跃监控器对象。除非一个活跃的
QGeoAreaMonitorInfo具有isPersistent()持久性,否则当当前应用程序终止时,活跃的QGeoAreaMonitorInfo将被停止。- abstract activeMonitors(lookupArea)
- 参数::
lookupArea –
QGeoShape- 返回类型::
QGeoAreaMonitorInfo 对象的列表
返回所有活跃监控器列表,这些监控器位于
QGeoAreaMonitorSource对象中心,中心位于lookupArea之内。如果lookupArea为空,则返回的列表将为空。通过
startMonitoring()启动了一个活跃监控器。对于每个活跃的监控器,源对象将发射所需的信号,例如areaEntered()或areaExited()。同一应用中的多个QGeoAreaMonitorSource实例共享相同的活跃监控器对象。除非一个活跃的
QGeoAreaMonitorInfo具有isPersistent()持久性,否则当当前应用程序终止时,活跃的QGeoAreaMonitorInfo将被停止。另请参阅
- areaEntered(monitor, update)#
- 参数::
monitor –
QGeoAreaMonitorInfoupdate –
QGeoPositionInfo
当当前位置从活跃的
monitor外部移动到被监控区域内时发出。update包含新位置。- areaExited(monitor, update)#
- 参数::
monitor –
QGeoAreaMonitorInfoupdate –
QGeoPositionInfo
当当前位置从活动
monitor内部移动到监控区域外时发出。update包含新位置。- static availableSources(
- 返回类型::
字符串列表
返回一个可用的监控插件列表,包括如果有的话默认的系统后端。
- backendProperty(name)#
- 参数::
name – str
- 返回类型::
对象
如果存在,返回名为
name的后端特定属性值。否则返回值无效。另请参阅
创建并返回一个使用底层系统资源监控区域的监控源,给定
parent。如果系统不支持位置监控,则返回
nullptr。通过加载名为
sourceName的插件来创建并返回给定parent的监控源。如果找不到插件,则返回
nullptr。- abstract error(
- 返回类型::
返回最后一次发生的错误类型。
注释
自 Qt6 以来,在调用
startMonitoring()或requestUpdate()时,总是重置最后一个错误。在发生错误后发出此信号。参数
areaMonitoringError描述了发生的错误类型。- monitorExpired(monitor)#
- 参数::
monitor –
QGeoAreaMonitorInfo
当
monitor已过期时发出。过期的区域监控器会自动从activeMonitors()列表中移除。另请参阅
- positionInfoSource()#
- 返回类型::
返回当前由此
QGeoAreaMonitorSource对象使用的QGeoPositionInfoSource。如果没有设置其他对象,则函数将返回createDefaultSource()。如果没有默认的
QGeoPositionInfoSource,函数返回nullptr。对返回的
QGeoPositionInfoSource实例的使用应考虑到它可能存在于不同的线程中。- 抽象requestUpdate(monitor, signal)#
- 参数::
monitor –
QGeoAreaMonitorInfo信号 – str
- 返回类型::
bool
启用单次区域监控。对
monitor的区域监控将在QGeoAreaMonitorSource实例首次发出signal信号时完成。一旦发出信号,monitor将自动从activeMonitors()列表中删除。如果monitor无效或有已过期的截止日期,则此函数返回false。QGeoAreaMonitor singleShotMonitor; QGeoAreaMonitorSource * source = QGeoAreaMonitorSource::createDefaultSource(this); //... bool ret = source->requestUpdate(singleShotMonitor, SIGNAL(areaExited(QGeoAreaMonitor,QGeoPositionInfo)));
上述
singleShotMonitor对象将停止发送更新,一旦首次发出areaExited()信号。在此点之前,任何其他信号可能根据区域上下文,零次或多次发出。不可能同时请求一个监控对象的多个信号更新。此函数的最后调用确定更新停止的信号。在此阶段,只能使用
areaEntered()和areaExited()信号来终止监控过程。在
QGeoAreaMonitorSource实例上请求持续监控失败,如果区域监控后端不支持PersistentAreaMonitorFeature。如果
monitor已经通过startMonitoring()注册,则它将转换为单次行为。- setBackendProperty(name, value)#
- 参数::
name – str
值 - 对象
- 返回类型::
bool
将后端特定的属性
name设置为value。如果成功,则返回true,否则返回false。后端特定的属性可以用于在运行时配置区域监控子系统的行为。另请参阅
- setPositionInfoSource(source)#
- 参数::
设置新的
QGeoPositionInfoSource,该源将由此QGeoAreaMonitorSource对象使用。区域监控后端成为新的 QObject 父级对象。之前的QGeoPositionInfoSource对象将被删除。所有基于同一sourceName的QGeoAreaMonitorSource实例共享相同的QGeoPositionInfoSource实例。当有意对区域监控引擎使用的定位系统进行操作时,这可能很有用。
请注意,
QGeoAreaMonitorSource的子类必须负责所有权的获取。由于此类背后的单例模式,newSource可能在新的线程中移动。另请参阅
- sourceName()#
- 返回类型::
字符串
返回当前正在使用的区域监控源实现中的唯一名称。
这是可以将它传递给
createSource()以创建特定区域监控源实现新实例的同一名。- 抽象方法startMonitoring(monitor)#
- 参数::
monitor –
QGeoAreaMonitorInfo- 返回类型::
bool
如果
monitor的监控可以成功启动,则返回true;否则返回false。无法启动监控的原因可能是没有设置合适的默认位置信息来源,并且没有通过setPositionInfoSource()设置替代的QGeoPositionInfoSource。如果
monitor已经激活,现有的监控对象将被新的monitor引用替换。通过identifier()来识别QGeoAreaMonitorInfo实例。因此,此函数也可以用于更新活动监控器。如果
monitor有过期的日期,则此函数返回 false。通过requestUpdate()在之前注册的单次监控器将监视器切换到永久监控模式。在
QGeoAreaMonitorSource实例上请求持续监控失败,如果区域监控后端不支持PersistentAreaMonitorFeature。- 抽象方法stopMonitoring(monitor)#
- 参数::
monitor –
QGeoAreaMonitorInfo- 返回类型::
bool
如果成功从
activeMonitors()列表中移除monitor,则返回 true;否则返回 false。这种行为与monitor是通过startMonitoring()还是requestUpdate()注册无关。- 抽象supportedAreaMonitorFeatures()#
- 返回类型::
返回此源可用的区域监控功能。