Changements apportés à Qt Positioning
Qt 6 est le résultat d'un effort conscient pour rendre le framework plus efficace et plus facile à utiliser.
Nous essayons de maintenir la compatibilité binaire et source pour toutes les API publiques dans chaque version. Mais certains changements étaient inévitables dans un effort pour faire de Qt un meilleur framework.
Dans cette rubrique, nous résumons ces changements dans Qt Positioning, et fournissons des conseils pour les gérer.
Rupture des changements de l'API publique
Cette section contient des informations sur les changements d'API qui rompent la compatibilité avec les sources.
Renommer QGeoPolygon::path()
Les méthodes QGeoPolygon::path() et QGeoPolygon::setPath() sont renommées respectivement QGeoPolygon::perimeter() et QGeoPolygon::setPerimeter(). Du côté de QML, la propriété QGeoPolygon::perimeter peut être utilisée sans aucun changement.
Utiliser QGeoShape pour la zone de délimitation de QGeoLocation
La classe QGeoLocation et son équivalent QML Location sont mis à jour pour utiliser QGeoShape au lieu de QGeoRectangle pour une zone de délimitation.
C++
Les objets QGeoLocation::boundingBox() et QGeoLocation::setBoundingBox() sont remplacés par QGeoLocation::boundingShape() et QGeoLocation::setBoundingShape() respectivement. 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 QtPositioning 6.2, assurez-vous donc de mettre à jour la version d'importation dans les fichiers QML.
import QtPositioning 6.2
Supprimer 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 avaient le signal error(), qui entrait en conflit avec la méthode error(). Dans Qt 6, nous avons renommé ces signaux en errorOccurred(). Spécifiquement :
QGeoAreaMonitorSource::error()est renommé en QGeoAreaMonitorSource::errorOccurred().QGeoPositionInfoSource::error()est renommé en QGeoPositionInfoSource::errorOccurred().QGeoSatelliteInfoSource::error()est renommé en QGeoSatelliteInfoSource::errorOccurred().
Suppression des signaux de délai de mise à jour
Dans Qt 5, les signaux QGeoPositionInfoSource::updateTimeout() et QGeoSatelliteInfoSource::requestTimeout() étaient utilisés pour notifier les cas où la position actuelle ou les informations satellite ne pouvaient pas être récupérées dans le délai spécifié. Ces signaux ont été supprimés dans Qt 6. Les signaux errorOccurred() avec les nouveaux types d'erreur sont utilisés à la place. Spécifiquement :
- QGeoPositionInfoSource utilise un signal errorOccurred() avec un nouveau code d'erreur QGeoPositionInfoSource::UpdateTimeoutError.
- QGeoSatelliteInfoSource utilise un signal errorOccurred() avec un nouveau code d'erreur QGeoSatelliteInfoSource::UpdateTimeoutError.
Les mêmes changements s'appliquent à l'objet QML PositionSource. Le signal PositionSource::updateTimeout() est supprimé. La propriété PositionSource::sourceError avec PositionSource.UpdateTimeoutError est utilisée à la place.
Refonte de la prise en charge NMEA
Dans Qt 5, nous avions un plugin de positionnement serialnmea et 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 responsable de la lecture des flux NMEA à partir d'un socket TCP ou d'un fichier local.
Dans Qt 6, nous avons réuni toutes ces fonctionnalités dans le plugin, qui a été renommé nmea. Il est maintenant capable de travailler avec les trois sources de données NMEA : port série, socket TCP et fichier local. Voir 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 contient des améliorations de l'API qui ne rompent pas la compatibilité des sources. Cependant, elles peuvent avoir un impact sur la logique de l'application, il est donc utile de les connaître.
Réinitialisation correcte des erreurs
Dans Qt 5, les erreurs pour les classes QGeoAreaMonitorSource, QGeoPositionInfoSource et QGeoSatelliteInfoSource n'étaient jamais réinitialisées. Ce comportement n'est pas logique, car appeler startUpdates(), startMonitoring() ou requestUpdates() sur l'une de ces classes ou de leurs sous-classes signifie effectivement commencer une nouvelle session de travail, ce qui signifie que nous ne devrions pas nous préoccuper des erreurs précédentes. Depuis Qt 6, nous réinitialisons l'erreur à NoError dès que l'une des méthodes susmentionnées est appelée.
Ajouter QGeoAddress::streetNumber
La classe QGeoAddress est étendue avec la propriété streetNumber, qui contient les informations sur le numéro de rue, le nom du bâtiment ou tout autre élément permettant de distinguer une adresse d'une autre. Utilisez streetNumber() et setStreetNumber() pour accéder à cette propriété à partir du code C++.
L'adresse QGeoAddress::street ne contient plus que le nom de la rue.
Il en va de même pour la contrepartie QML Address. La propriété Address::street n'est plus utilisée que pour le nom de la rue, tandis que la propriété Address::streetNumber est utilisée pour d'autres détails importants de l'adresse.
Ajout de l'argument "timeout" à PositionSource::update()
Le paramètre timeout est spécifié en millisecondes. Si timeout est égal à zéro (valeur par défaut), le délai d'attente est fixé par défaut à un niveau raisonnable, en fonction de la source.
Refonte des classes QGeoSatelliteInfo, QGeoPositionInfo et QGeoAreaMonitorInfo
Ces classes utilisent désormais QExplicitlySharedDataPointer dans leur implémentation. Cela signifie que les classes implémentent la fonction copy-on-write. Cela les rend peu coûteuses à copier, de sorte qu'elles peuvent être transmises par valeur.
Une autre amélioration est l'ajout de la prise en charge des opérations de déplacement efficaces.
Changements dans l'implémentation du plugin Qt Positioning
Cette section fournit des informations sur les changements apportés à l'interface des plugins.
Dans Qt 5 for, nous avions deux versions de l'interface des greffons :
QGeoPositionInfoSourceFactoryqui fournissait les fonctionnalités de base.QGeoPositionInfoSourceFactoryV2qui étendait la classe de base avec la possibilité 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, ne laissant que la classe QGeoPositionInfoSourceFactory. Ses méthodes permettent désormais de passer des paramètres personnalisés.
Note : L'identifiant de l'interface est mis à jour pour refléter la mise à jour de la version majeure. 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 ¶meters) override; QGeoSatelliteInfoSource *satelliteInfoSource(QObject *parent, const QVariantMap ¶meters) override; QGeoAreaMonitorSource *areaMonitor(QObject *parent, const QVariantMap ¶meters) 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.