class QGeoAreaMonitorSource#

QGeoAreaMonitorSource 类启用对一组指定坐标的邻近变化检测。 更多

Inheritance diagram of 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)#
参数::

parentQObject

创建一个具有给定 parent 的监控源。

abstract activeMonitors()#
返回类型::

QGeoAreaMonitorInfo 对象的列表

返回所有活跃监控器列表,这些监控器由QGeoAreaMonitorSource对象所知。

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

除非一个活跃的QGeoAreaMonitorInfo具有isPersistent()持久性,否则当当前应用程序终止时,活跃的QGeoAreaMonitorInfo将被停止。

abstract activeMonitors(lookupArea)
参数::

lookupAreaQGeoShape

返回类型::

QGeoAreaMonitorInfo 对象的列表

返回所有活跃监控器列表,这些监控器位于QGeoAreaMonitorSource对象中心,中心位于lookupArea之内。如果lookupArea为空,则返回的列表将为空。

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

除非一个活跃的QGeoAreaMonitorInfo具有isPersistent()持久性,否则当当前应用程序终止时,活跃的QGeoAreaMonitorInfo将被停止。

另请参阅

QGeoShape

areaEntered(monitor, update)#
参数::

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

update包含新位置。

areaExited(monitor, update)#
参数::

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

update包含新位置。

static availableSources(
返回类型::

字符串列表

返回一个可用的监控插件列表,包括如果有的话默认的系统后端。

backendProperty(name)#
参数::

name – str

返回类型::

对象

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

另请参阅

setBackendProperty()

static createDefaultSource(parent)#
参数::

parentQObject

返回类型::

QGeoAreaMonitorSource

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

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

static createSource(sourceName, parent)#
参数::
  • sourceName – str

  • parentQObject

返回类型::

QGeoAreaMonitorSource

通过加载名为 sourceName 的插件来创建并返回给定 parent 的监控源。

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

abstract error(
返回类型::

错误

返回最后一次发生的错误类型。

注释

自 Qt6 以来,在调用 startMonitoring()requestUpdate() 时,总是重置最后一个错误。

errorOccurred(error)#
参数::

errorError

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

monitorExpired(monitor)#
参数::

monitorQGeoAreaMonitorInfo

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

另请参阅

activeMonitors()

positionInfoSource()#
返回类型::

QGeoPositionInfoSource

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

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

对返回的 QGeoPositionInfoSource 实例的使用应考虑到它可能存在于不同的线程中。

抽象requestUpdate(monitor, signal)#
参数::
返回类型::

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() 注册,则它将转换为单次行为。

注释

由于 Qt6,此方法始终在开始监控之前将最后一个错误重置为 NoError

setBackendProperty(name, value)#
参数::
  • name – str

  • - 对象

返回类型::

bool

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

另请参阅

backendProperty()

setPositionInfoSource(source)#
参数::

来源 - QGeoPositionInfoSource

设置新的 QGeoPositionInfoSource,该源将由此 QGeoAreaMonitorSource 对象使用。区域监控后端成为新的 QObject 父级对象。之前的 QGeoPositionInfoSource 对象将被删除。所有基于同一 sourceNameQGeoAreaMonitorSource 实例共享相同的 QGeoPositionInfoSource 实例。

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

请注意,QGeoAreaMonitorSource 的子类必须负责所有权的获取。由于此类背后的单例模式,newSource 可能在新的线程中移动。

另请参阅

positionInfoSource()

sourceName()#
返回类型::

字符串

返回当前正在使用的区域监控源实现中的唯一名称。

这是可以将它传递给 createSource() 以创建特定区域监控源实现新实例的同一名。

抽象方法startMonitoring(monitor)#
参数::

monitorQGeoAreaMonitorInfo

返回类型::

bool

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

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

如果 monitor 有过期的日期,则此函数返回 false。通过 requestUpdate() 在之前注册的单次监控器将监视器切换到永久监控模式。

QGeoAreaMonitorSource实例上请求持续监控失败,如果区域监控后端不支持PersistentAreaMonitorFeature

注释

由于 Qt6,此方法始终在开始监控之前将最后一个错误重置为 NoError

另请参阅

stopMonitoring()

抽象方法stopMonitoring(monitor)#
参数::

monitorQGeoAreaMonitorInfo

返回类型::

bool

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

抽象supportedAreaMonitorFeatures()#
返回类型::

AreaMonitorFeature 的组合

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