Sur cette page

Modifications apportées à Qt Positioning

Qt 6 résultent d'un effort délibéré visant à rendre le framework plus efficace et plus facile à utiliser.

Nous nous efforçons de maintenir la compatibilité binaire et source pour toutes les API publiques à chaque version. Cependant, certaines modifications étaient inévitables afin d’améliorer le framework Qt.

Dans cette rubrique, nous résumons ces modifications dans Qt Positioning et fournissons des conseils pour les gérer.

Modifications des API publiques entraînant une rupture de compatibilité

Cette section contient des informations sur les modifications d'API qui rompent la compatibilité au niveau du code source.

Renommage de QGeoPolygon::path()

Les méthodes QGeoPolygon::path() et QGeoPolygon::setPath() sont respectivement renommées QGeoPolygon::perimeter() et QGeoPolygon::setPerimeter(). Côté QML, la propriété QGeoPolygon::perimeter peut être utilisée sans aucune modification.

Utilisez ` QGeoShape ` pour la zone de délimitation de ` QGeoLocation `

La classe QGeoLocation et son équivalent QML Location ont été mis à jour pour utiliser QGeoShape au lieu de QGeoRectangle pour la zone de délimitation.

C++

Les méthodes QGeoLocation::boundingBox() et QGeoLocation::setBoundingBox() sont respectivement remplacées par QGeoLocation::boundingShape() et QGeoLocation::setBoundingShape(). Un objet QGeoShape est désormais utilisé comme stockage de données sous-jacent.

QML

La propriété ` QGeoLocation::boundingBox ` est remplacée par ` QGeoLocation::boundingShape`. Cette propriété est disponible depuis la version QtPositioning 6.2 ; veillez donc à mettre à jour la version d’importation dans les fichiers QML.

import QtPositioning 6.2

Suppression de QGeoShape::extendShape()

La méthode QGeoShape::extendShape() a été dépréciée dans Qt 5.9 et finalement supprimée dans Qt 6. Utilisez QGeoRectangle::extendRectangle() et QGeoCircle::extendCircle() si vous avez besoin de cette fonctionnalité pour ces classes.

Renommer le signal « error » en « errorOccurred »

Dans Qt 5, plusieurs classes Qt Positioning disposaient du signal « error() », ce qui entraînait un conflit avec la méthode « error() ». Dans Qt 6, nous avons renommé ces signaux en « errorOccurred() ». Plus précisément :

Suppression des signaux de délai d'expiration de mise à jour

Dans Qt 5, les signaux « QGeoPositionInfoSource::updateTimeout() » et « QGeoSatelliteInfoSource::requestTimeout() » étaient utilisés pour signaler les cas où la position actuelle ou les informations sur les satellites ne pouvaient pas être récupérées dans le délai spécifié. Ces signaux ont été supprimés dans Qt 6. Ils sont remplacés par les signaux « errorOccurred() » avec les nouveaux types d'erreur. Plus précisément :

Les mêmes modifications s’appliquent à l’objet QML ` PositionSource `. Le signal ` PositionSource::updateTimeout() ` est supprimé. La propriété ` PositionSource::sourceError ` avec une valeur ` PositionSource.UpdateTimeoutError ` est utilisée à la place.

Refonte de la prise en charge NMEA

Dans Qt 5, nous disposions d’un plugin de positionnement « serialnmea » et d’une propriété « nmeaSource » dans l’objet « PositionSource ».

Le plugin permettait d’accéder aux flux NMEA via le port série, tandis que l’objet QML était chargé de lire le flux NMEA à partir d’un socket TCP ou d’un fichier local.

Dans Qt 6, nous avons regroupé toutes ces fonctionnalités dans le plugin, qui a été renommé « nmea ». Il est désormais capable de fonctionner avec les trois sources de données NMEA : le port série, le socket TCP et le fichier local. Consultez la description du plugin pour plus de détails.

La propriété ` nmeaSource ` de l’objet ` PositionSource ` a été supprimée.

Autres modifications de l’API

Cette section présente les améliorations apportées à l’API qui ne rompent pas la compatibilité des sources. Elles peuvent toutefois avoir un impact sur la logique de l’application ; il est donc utile d’en prendre connaissance.

Réinitialisation correcte des erreurs

Dans Qt 5, les erreurs des classes ` QGeoAreaMonitorSource`, ` QGeoPositionInfoSource ` et ` QGeoSatelliteInfoSource ` n’étaient jamais réinitialisées. Ce comportement n’est pas logique, car l’appel de ` startUpdates()`, ` startMonitoring() ` ou ` requestUpdates() ` sur l’une de ces classes ou leurs sous-classes revient en effet à démarrer une nouvelle session de travail, ce qui signifie que les erreurs précédentes ne doivent plus être prises en compte. Depuis Qt 6, nous réinitialisons l’erreur à ` NoError ` dès qu’une des méthodes susmentionnées est appelée.

Ajouter QGeoAddress::streetNumber

La classe ` QGeoAddress ` est désormais dotée de la propriété ` streetNumber `, qui contient les informations relatives au numéro de rue, au nom du bâtiment ou à tout autre élément pouvant servir à distinguer une adresse d’une autre. Utilisez ` streetNumber()` et ` setStreetNumber()` pour accéder à cette propriété depuis du code C++.

La propriété ` QGeoAddress::street ` ne contient désormais que le nom de la rue.

Il en va de même pour l’équivalent QML de Address. La propriété Address::street n’est désormais utilisée que pour le nom de rue, tandis que la propriété Address::streetNumber est utilisée pour les autres détails importants de l’adresse.

Ajouter l’argument « timeout » à PositionSource::update()

Le paramètre « timeout » est spécifié en millisecondes. Si la valeur de « timeout » est égale à zéro (valeur par défaut), un délai d’expiration raisonnable, adapté à la source, est appliqué par défaut.

Refonte des classes ` QGeoSatelliteInfo`, ` QGeoPositionInfo ` et ` QGeoAreaMonitorInfo `

Ces classes utilisent désormais QExplicitlySharedDataPointer dans leur implémentation. Cela signifie qu’elles implémentent le « copy-on-write ». La copie de ces classes est ainsi peu coûteuse, ce qui permet de les passer par valeur.

Une autre amélioration réside dans l’ajout de la prise en charge d’opérations de déplacement efficaces.

Modifications apportées à l’implémentation du plugin « Qt Positioning »

Cette section fournit des informations sur les modifications apportées à l’interface du plugin.

Dans Qt 5, nous disposions de deux versions de l'interface du plugin :

  • QGeoPositionInfoSourceFactory qui offrait les fonctionnalités de base.
  • QGeoPositionInfoSourceFactoryV2 qui étendait la classe de base en permettant de fournir des paramètres personnalisés pour les objets créés.

Dans Qt 6, nous avons fusionné ces deux implémentations en une seule, en ne conservant que la classe ` QGeoPositionInfoSourceFactory `. Ses méthodes permettent désormais de passer des paramètres personnalisés.

Remarque : l’identifiant de l’interface a été mis à jour pour refléter la mise à jour majeure de la version. Utilisez "org.qt-project.qt.position.sourcefactory/6.0" dans vos plugins Qt Positioning.

Voici un exemple de déclaration de classe 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.