QNmeaPositionInfoSource Class
QNmeaPositionInfoSource 类通过 NMEA 数据源提供位置信息。更多内容...
| 头文件: | #include <QNmeaPositionInfoSource> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Positioning) target_link_libraries(mytarget PRIVATE Qt6::Positioning) |
| qmake: | QT += positioning |
| 继承自: | QGeoPositionInfoSource |
公共类型
| enum | UpdateMode { RealTimeMode, SimulationMode } |
公共函数
| QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode updateMode, QObject *parent = nullptr) | |
| virtual | ~QNmeaPositionInfoSource() |
| QIODevice * | device() const |
| void | setDevice(QIODevice *device) |
| void | setUserEquivalentRangeError(double uere) |
| QNmeaPositionInfoSource::UpdateMode | updateMode() const |
| double | userEquivalentRangeError() const |
重新实现的公共函数
| virtual QGeoPositionInfoSource::Error | error() const override |
| virtual QGeoPositionInfo | lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const override |
| virtual int | minimumUpdateInterval() const override |
| virtual void | setUpdateInterval(int msec) override |
| virtual QGeoPositionInfoSource::PositioningMethods | supportedPositioningMethods() const override |
公共槽
| virtual void | requestUpdate(int msec = 0) override |
| virtual void | startUpdates() override |
| virtual void | stopUpdates() override |
受保护函数
| virtual bool | parsePosInfoFromNmeaData(const char *data, int size, QGeoPositionInfo *posInfo, bool *hasFix) |
详细说明
NMEA 是一种常用的协议,用于指定特定时间点下的全球位置。QNmeaPositionInfoSource 类读取 NMEA 数据,并利用这些数据以QGeoPositionInfo 对象的形式提供位置数据。
QNmeaPositionInfoSource 实例可在“RealTimeMode ”或“SimulationMode ”模式下运行。这些模式允许从实时位置数据源读取 NMEA 数据,或为模拟目的重放先前记录的 NMEA 数据。
NMEA 数据的来源通过setDevice() 设置。
使用startUpdates() 开始接收定期的位置更新,使用stopUpdates() 停止这些更新。如果您仅需偶尔更新,可以调用requestUpdate() 请求单次更新。
在两种情况下,位置信息均通过positionUpdated() 信号接收,且可通过lastKnownPosition() 获取最后已知位置。
QNmeaPositionInfoSource 支持报告水平和垂直位置的精度。要启用位置精度报告,必须使用setUserEquivalentRangeError() 设置与 NMEA 数据源相关的用户等效范围误差(User Equivalent Range Error)估计值。
成员类型文档
enum QNmeaPositionInfoSource::UpdateMode
定义可用的更新模式。
| 常量 | 值 | 描述 |
|---|---|---|
QNmeaPositionInfoSource::RealTimeMode | 1 | 位置数据会在数据源提供时被读取并分发。如果您使用的是实时位置数据源(例如 GPS 硬件设备),请使用此模式。 |
QNmeaPositionInfoSource::SimulationMode | 2 | 使用 NMEA 源数据中的日期和时间信息,以数据最初记录时的速率提供位置更新。如果数据源包含先前记录的 NMEA 数据,且您希望为模拟目的重放这些数据,请使用此模式。 |
成员函数文档
[explicit] QNmeaPositionInfoSource::QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode updateMode, QObject *parent = nullptr)
使用给定的parent 和updateMode 创建一个QNmeaPositionInfoSource实例。
[virtual noexcept] QNmeaPositionInfoSource::~QNmeaPositionInfoSource()
销毁位置源。
QIODevice *QNmeaPositionInfoSource::device() const
返回 NMEA 数据源。
另请参阅 setDevice()。
[override virtual] QGeoPositionInfoSource::Error QNmeaPositionInfoSource::error() const
重新实现了:QGeoPositionInfoSource::error() const。
[override virtual] QGeoPositionInfo QNmeaPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const
重新实现了:QGeoPositionInfoSource::lastKnownPosition (bool fromSatellitePositioningMethodsOnly)const。
[override virtual] int QNmeaPositionInfoSource::minimumUpdateInterval() const
重新实现了属性QGeoPositionInfoSource::minimumUpdateInterval 的访问函数。
[virtual protected] bool QNmeaPositionInfoSource::parsePosInfoFromNmeaData(const char *data, int size, QGeoPositionInfo *posInfo, bool *hasFix)
将一个 NMEA 语句字符串解析为 `QGeoPositionInfo` 对象。
默认实现将解析标准NMEA语句。当需要处理非标准NMEA语句时,应在子类中重写此方法。
解析器从data 读取size 字节数据,并利用这些信息配置posInfo 和hasFix 。如果hasFix 设置为false,则posInfo 可能仅包含时间,或仅包含日期和时间。
如果句子解析成功,则返回 true;否则返回 false,且不应修改posInfo 或hasFix 。
[override virtual slot] void QNmeaPositionInfoSource::requestUpdate(int msec = 0)
重新实现了:QGeoPositionInfoSource::requestUpdate(int timeout)。
void QNmeaPositionInfoSource::setDevice(QIODevice *device)
将 NMEA 数据源设置为device 。如果该设备尚未打开,则将以ReadOnly 模式打开它。
数据源设备只能设置一次,且必须在调用startUpdates() 或requestUpdate() 之前完成设置。
注意: device 必须调用QIODevice::readyRead(),才能在有数据可供读取时通知源设备。QNmeaPositionInfoSource 不会获取设备的所有权,因此不会在销毁时释放该设备。
另请参阅 device()。
[override virtual] void QNmeaPositionInfoSource::setUpdateInterval(int msec)
重新实现了属性QGeoPositionInfoSource::updateInterval 的访问函数。
void QNmeaPositionInfoSource::setUserEquivalentRangeError(double uere)
将用户等效范围误差(UERE)设置为uere 。UERE用于计算位置信息源报告的位置信息的精度估计值。UERE应设置为与生成NMEA数据流的GPS设备相适应的值。
真实的UERE值是根据多种误差源计算得出的,包括卫星引入的误差、信号在大气层中的传播延迟,以及GPS接收设备引入的误差。有关GPS精度的详细信息,请参阅Sam J. Wormley所著的《GPS误差与接收机精度估算》。
UERE的典型值约为5.1。
另请参阅 userEquivalentRangeError()。
[override virtual slot] void QNmeaPositionInfoSource::startUpdates()
重写了:QGeoPositionInfoSource::startUpdates()。
[override virtual slot] void QNmeaPositionInfoSource::stopUpdates()
重写了:QGeoPositionInfoSource::stopUpdates()。
[override virtual] QGeoPositionInfoSource::PositioningMethods QNmeaPositionInfoSource::supportedPositioningMethods() const
重新实现了:QGeoPositionInfoSource::supportedPositioningMethods() const。
QNmeaPositionInfoSource::UpdateMode QNmeaPositionInfoSource::updateMode() const
返回更新模式。
double QNmeaPositionInfoSource::userEquivalentRangeError() const
返回当前的用户等效范围误差(UERE)。UERE 用于估算位置信息源报告的位置信息的精度。默认值为 NaN,这意味着不会提供精度信息。
另请参阅 setUserEquivalentRangeError()。
© 2026 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.