PySide6.QtPositioning.QGeoAreaMonitorSource

class QGeoAreaMonitorSource

QGeoAreaMonitorSource 类能够检测指定坐标集的接近变化。更多

PySide6.QtPositioning.QGeoAreaMonitorSource 的继承图

概要

方法

虚拟方法

信号

静态函数

注意

本文档可能包含从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

匹配所有可能的区域监控功能。

__init__(parent)
Parameters:

父对象QObject

使用给定的parent创建一个监控源。

abstract activeMonitors()
Return type:

QGeoAreaMonitorInfo的列表

返回QGeoAreaMonitorSource对象已知的所有活动监视器的列表。

通过startMonitoring()启动了一个活动监视器。对于每个活动监视器,源对象将发出所需的信号,例如areaEntered()areaExited()。同一应用程序中的多个QGeoAreaMonitorSource实例共享相同的活动监视器对象。

除非一个活动的QGeoAreaMonitorInfo isPersistent(),否则活动的QGeoAreaMonitorInfo将在当前应用程序终止时停止。

abstract activeMonitors(lookupArea)
Parameters:

lookupAreaQGeoShape

Return type:

QGeoAreaMonitorInfo的列表

返回已知的QGeoAreaMonitorSource对象中所有活动监视器的列表,其中心位于lookupArea内。如果lookupArea为空,则返回的列表将为空。

通过startMonitoring()启动了一个活动监视器。对于每个活动监视器,源对象将发出所需的信号,例如areaEntered()areaExited()。同一应用程序中的多个QGeoAreaMonitorSource实例共享相同的活动监视器对象。

除非一个活动的QGeoAreaMonitorInfo isPersistent(),否则活动的QGeoAreaMonitorInfo将在当前应用程序终止时停止。

另请参阅

QGeoShape

areaEntered(monitor, update)
Parameters:

当当前位置从活动monitor之外的位置移动到监控区域内时触发。

update 保存了新位置。

areaExited(monitor, update)
Parameters:

当当前位置从活动monitor内的位置移动到监控区域外的位置时触发。

update 保存了新位置。

static availableSources()
Return type:

字符串列表

返回可用的监控插件列表,包括默认的系统后端(如果可用)。

backendProperty(name)
Parameters:

name – str

Return type:

对象

返回名为name的后端特定属性的值(如果存在)。否则,返回的值将无效。

另请参阅

setBackendProperty()

static createDefaultSource(parent)
Parameters:

父对象QObject

Return type:

QGeoAreaMonitorSource

创建并返回一个监控源,该监控源使用底层系统上的资源来监控给定parent的区域。

如果系统不支持位置监控,则返回 nullptr

static createSource(sourceName, parent)
Parameters:
  • sourceName – str

  • parentQObject

Return type:

QGeoAreaMonitorSource

通过加载名为 sourceName 的插件,创建并返回一个具有给定 parent 的监控源。

如果找不到插件,则返回 nullptr

abstract error()
Return type:

错误

返回上次发生的错误类型。

注意

自Qt6以来,当调用startMonitoring()requestUpdate()时,最后的错误总是被重置。

errorOccurred(error)
Parameters:

错误Error

此信号在发生错误后发出。areaMonitoringError 参数描述了发生的错误类型。

monitorExpired(monitor)
Parameters:

监控QGeoAreaMonitorInfo

monitor过期时发出。过期的区域监视器会自动从activeMonitors()列表中移除。

另请参阅

activeMonitors()

positionInfoSource()
Return type:

QGeoPositionInfoSource

返回当前由该QGeoAreaMonitorSource对象使用的QGeoPositionInfoSource。如果未设置其他对象,该函数将返回createDefaultSource()

如果没有默认的QGeoPositionInfoSource存在,函数将返回nullptr

使用返回的QGeoPositionInfoSource实例时,应考虑它可能位于不同的线程中。

abstract requestUpdate(monitor, signal)
Parameters:
Return type:

布尔

启用单次区域监控。对于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()信号可用于终止监控过程。

如果区域监控后端不支持PersistentAreaMonitorFeature,则在QGeoAreaMonitorSource实例上请求持久监控将失败。

如果 monitor 已经通过 startMonitoring() 注册,它将被转换为单次行为。

注意

自Qt6以来,此方法在开始监控之前总是将最后一个错误重置为NoError

setBackendProperty(name, value)
Parameters:
  • name – str

  • value – 对象

Return type:

布尔

将名为name的后端特定属性设置为value。成功时返回true,否则返回false。后端特定属性可用于在运行时配置区域监控子系统的行为。

另请参阅

backendProperty()

setPositionInfoSource(source)
Parameters:

来源QGeoPositionInfoSource

设置新的QGeoPositionInfoSource以供此QGeoAreaMonitorSource对象使用。区域监控后端将成为newSource的新QObject父对象。先前的QGeoPositionInfoSource对象将被删除。所有基于相同sourceName()QGeoAreaMonitorSource实例共享相同的QGeoPositionInfoSource实例。

当需要操作区域监控引擎使用的定位系统时,这可能很有用。

请注意,所有权必须由QGeoAreaMonitorSource的子类处理。由于该类背后的单例模式,newSource可能会被移动到一个新线程中。

另请参阅

positionInfoSource()

sourceName()
Return type:

字符串

返回正在使用的区域监视器源实现的唯一名称。

这是可以传递给createSource()的相同名称,以便创建特定区域监视器源实现的新实例。

abstract startMonitoring(monitor)
Parameters:

监控QGeoAreaMonitorInfo

Return type:

布尔

如果monitor的监控能够成功启动,则返回true;否则返回false。无法启动监控的原因可能是没有可用的适当默认位置信息源,同时没有通过setPositionInfoSource()设置替代的QGeoPositionInfoSource

如果 monitor 已经激活,现有的监控对象将被新的 monitor 引用替换。QGeoAreaMonitorInfo 实例的识别通过 identifier() 进行。因此,此函数也可用于更新活动的监控器。

如果monitor的过期日期已过,此函数将返回false。对于已经通过requestUpdate()注册的单次监视器调用此函数,将监视器切换到永久监视模式。

如果区域监控后端不支持PersistentAreaMonitorFeature,则在QGeoAreaMonitorSource实例上请求持久监控将失败。

注意

自Qt6以来,此方法在开始监控之前总是将最后一个错误重置为NoError

另请参阅

stopMonitoring()

abstract stopMonitoring(monitor)
Parameters:

监控QGeoAreaMonitorInfo

Return type:

布尔

如果monitor成功从activeMonitors()列表中移除,则返回true;否则返回false。此行为与monitor是通过startMonitoring()还是requestUpdate()注册无关。

abstract supportedAreaMonitorFeatures()
Return type:

AreaMonitorFeature的组合

返回此源可用的区域监控功能。