En esta página

Los cambios introducidos en Qt Positioning

Qt 6 son el resultado del esfuerzo consciente por hacer el framework más eficiente y fácil de usar.

Intentamos mantener la compatibilidad binaria y de código fuente de todas las API públicas en cada versión. Pero algunos cambios eran inevitables en un esfuerzo por hacer de Qt un framework mejor.

En este tema resumimos esos cambios en Qt Positioning, y proporcionamos una guía para manejarlos.

Cambios en la API pública

Esta sección contiene información sobre los cambios en la API que rompen la compatibilidad con el código fuente.

Renombrar QGeoPolygon::path()

Los métodos QGeoPolygon::path() y QGeoPolygon::setPath() pasan a llamarse QGeoPolygon::perimeter() y QGeoPolygon::setPerimeter() respectivamente. En el lado QML la propiedad QGeoPolygon::perimeter se puede utilizar sin ningún cambio.

Utilizar QGeoShape para el área delimitadora QGeoLocation

La clase QGeoLocation y su homóloga Location QML se actualizan para utilizar QGeoShape en lugar de QGeoRectangle para un área delimitadora.

C++

Las clases QGeoLocation::boundingBox() y QGeoLocation::setBoundingBox() se sustituyen por QGeoLocation::boundingShape() y QGeoLocation::setBoundingShape() respectivamente. Ahora se utiliza un objeto QGeoShape como almacenamiento de datos subyacente.

QML

La propiedad QGeoLocation::boundingBox se sustituye por QGeoLocation::boundingShape. Esta propiedad está disponible desde QtPositioning 6.2, así que asegúrese de actualizar la versión de importación en los archivos QML.

import QtPositioning 6.2

Eliminar QGeoShape::extendShape()

El método QGeoShape::extendShape() fue obsoleto en Qt 5.9 y finalmente eliminado en Qt 6. Utiliza QGeoRectangle::extendRectangle() y QGeoCircle::extendCircle() si necesitas esta funcionalidad para estas clases.

Renombrar la señal error a errorOccurred

En Qt 5 múltiples clases Qt Positioning tenían la señal error(), que chocaba con el método error(). En Qt 6 hemos renombrado estas señales a errorOccurred(). Específicamente:

Eliminar las señales de tiempo de espera de actualización

En Qt 5 se utilizaban las señales QGeoPositionInfoSource::updateTimeout() y QGeoSatelliteInfoSource::requestTimeout() para notificar los casos en los que no se podía recuperar la posición actual o la información del satélite dentro del tiempo de espera especificado. Estas señales fueron eliminadas en Qt 6. En su lugar se utilizan las señales errorOccurred() con los nuevos tipos de error. En concreto:

Los mismos cambios se aplican al objeto QML PositionSource. Se elimina la señal PositionSource::updateTimeout(). En su lugar se utiliza la propiedad PositionSource::sourceError con un PositionSource.UpdateTimeoutError.

Rediseño del soporte NMEA

En Qt 5 teníamos un plugin de posicionamiento serialnmea y una propiedad nmeaSource en el objeto PositionSource.

El plugin proporcionaba acceso a los flujos NMEA a través del puerto serie, mientras que el objeto QML era el responsable de leer el flujo NMEA desde el socket TCP o el archivo local.

En Qt 6 unimos todas estas características en el plugin, que ahora se renombra como nmea. Ahora es capaz de trabajar con las tres fuentes de datos NMEA: puerto serie, socket TCP y fichero local. Ver descripción del plugin para más detalles.

La propiedad nmeaSource del objeto PositionSource ha sido eliminada.

Otros cambios en la API

Esta sección contiene mejoras de la API que no rompen la compatibilidad de fuentes. Sin embargo, pueden tener un impacto en la lógica de la aplicación, por lo que es útil conocerlas.

Restablecer errores correctamente

En Qt 5 los errores de las clases QGeoAreaMonitorSource, QGeoPositionInfoSource y QGeoSatelliteInfoSource nunca se reiniciaban. Este comportamiento no es lógico, ya que llamar a startUpdates(), startMonitoring() o requestUpdates() en una de estas clases o sus subclases significa efectivamente iniciar una nueva sesión de trabajo, lo que significa que no deberíamos preocuparnos por los errores anteriores. Desde Qt 6 reseteamos el error a NoError una vez que se llama a uno de los métodos mencionados.

Añadir QGeoAddress::streetNumber

La clase QGeoAddress se extiende con la propiedad streetNumber, que contiene la información sobre el número de la calle, el nombre del edificio o cualquier otra cosa que pueda servir para distinguir una dirección de otra. Utilice streetNumber() y setStreetNumber() para acceder a esta propiedad desde código C++.

QGeoAddress::street ahora sólo contiene el nombre de la calle.

Lo mismo se aplica a Address homólogo QML. La propiedad Address::street se utiliza ahora sólo para el nombre de la calle, mientras que la propiedad Address::streetNumber se utiliza para otros detalles importantes de la dirección.

Se ha añadido el argumento timeout a PositionSource::update()

timeout se especifica en milisegundos. Si timeout es cero (el valor por defecto), se establece por defecto un periodo de tiempo razonable apropiado para la fuente.

Refactorización de las clases QGeoSatelliteInfo, QGeoPositionInfo y QGeoAreaMonitorInfo

Estas clases utilizan ahora QExplicitlySharedDataPointer en su implementación. Esto significa que las clases implementan copy-on-write. Esto las hace baratas de copiar, por lo que pueden ser pasadas por valor.

Otra mejora es la adición de soporte para las eficientes operaciones move.

Cambios en la implementación del plugin Qt Positioning

Esta sección proporciona información sobre los cambios en la interfaz de plugins.

En Qt 5 para teníamos dos versiones de la interfaz de plugins:

  • QGeoPositionInfoSourceFactory que proporcionaba las características básicas.
  • QGeoPositionInfoSourceFactoryV2 que extendía la clase base con la posibilidad de proporcionar parámetros personalizados para los objetos creados.

En Qt 6 fusionamos estas dos implementaciones en una, dejando sólo la clase QGeoPositionInfoSourceFactory. Sus métodos permiten ahora pasar parámetros personalizados.

Nota: El identificador de la interfaz se ha actualizado para reflejar la actualización de la versión principal. Utilice "org.qt-project.qt.position.sourcefactory/6.0" en sus plugins Qt Positioning.

He aquí un ejemplo de declaración de clase de plugin:

class MyPlugin : public QObject, public QGeoPositionInfoSourceFactory
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.qt.position.sourcefactory/6.0"
                      FILE "plugin.json")
    Q_INTERFACES(QGeoPositionInfoSourceFactory)

public:
    QGeoPositionInfoSource *positionInfoSource(QObject *parent, const QVariantMap &parameters) override;
    QGeoSatelliteInfoSource *satelliteInfoSource(QObject *parent, const QVariantMap &parameters) override;
    QGeoAreaMonitorSource *areaMonitor(QObject *parent, const QVariantMap &parameters) override;
};

© 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.