Die Änderungen an Qt Positioning
Qt 6 sind das Ergebnis des bewussten Bemühens, das Framework effizienter und benutzerfreundlicher zu gestalten.
Wir versuchen, die Binär- und Quellcodekompatibilität für alle öffentlichen APIs in jeder Version zu erhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.
In diesem Thema fassen wir diese Änderungen unter Qt Positioning zusammen und geben eine Anleitung zu deren Handhabung.
Öffentliche API-Änderungen aufheben
Dieser Abschnitt enthält Informationen über API-Änderungen, die die Quellcode-Kompatibilität aufheben.
Umbenennung von QGeoPolygon::path()
Die Methoden QGeoPolygon::path()
und QGeoPolygon::setPath()
werden umbenannt in QGeoPolygon::perimeter() bzw. QGeoPolygon::setPerimeter(). Auf der QML-Seite kann die Eigenschaft QGeoPolygon::perimeter ohne Änderungen verwendet werden.
Verwenden Sie QGeoShape für QGeoLocation Bounding Area
Die Klasse QGeoLocation und ihr QML-Gegenstück Location werden aktualisiert, um QGeoShape anstelle von QGeoRectangle für einen Begrenzungsbereich zu verwenden.
C++
Die Klassen QGeoLocation::boundingBox()
und QGeoLocation::setBoundingBox()
werden durch QGeoLocation::boundingShape() bzw. QGeoLocation::setBoundingShape() ersetzt. Ein QGeoShape Objekt wird nun als zugrundeliegender Datenspeicher verwendet.
QML
Die Eigenschaft QGeoLocation::boundingBox
wird durch QGeoLocation::boundingShape ersetzt. Diese Eigenschaft ist seit QtPositioning 6.2 verfügbar. Stellen Sie daher sicher, dass Sie die Importversion in den QML-Dateien aktualisieren.
import QtPositioning 6.2
QGeoShape::extendShape() entfernen
Die Methode QGeoShape::extendShape()
wurde in Qt 5.9 veraltet und schließlich in Qt 6 entfernt. Verwenden Sie QGeoRectangle::extendRectangle() und QGeoCircle::extendCircle(), wenn Sie diese Funktionalität für diese Klassen benötigen.
Umbenennung des Signals error in errorOccurred
In Qt 5 hatten mehrere Qt Positioning Klassen das Signal error()
, das mit der Methode error()
kollidierte. In Qt 6 haben wir diese Signale in errorOccurred()
umbenannt. Im Einzelnen:
QGeoAreaMonitorSource::error()
wird umbenannt in QGeoAreaMonitorSource::errorOccurred().QGeoPositionInfoSource::error()
wird umbenannt in QGeoPositionInfoSource::errorOccurred().QGeoSatelliteInfoSource::error()
wird umbenannt in QGeoSatelliteInfoSource::errorOccurred().
Update-Timeout-Signale entfernen
In Qt 5 wurden die Signale QGeoPositionInfoSource::updateTimeout()
und QGeoSatelliteInfoSource::requestTimeout()
verwendet, um die Fälle zu melden, in denen die aktuelle Position oder die Satelliteninformationen nicht innerhalb des angegebenen Zeitlimits abgerufen werden konnten. Diese Signale wurden in Qt 6 entfernt. Stattdessen werden die errorOccurred()
Signale mit den neuen Fehlertypen verwendet. Genauer gesagt:
- QGeoPositionInfoSource verwendet ein errorOccurred()-Signal mit einem neuen QGeoPositionInfoSource::UpdateTimeoutError -Fehlercode.
- QGeoSatelliteInfoSource verwendet ein errorOccurred()-Signal mit einem neuen QGeoSatelliteInfoSource::UpdateTimeoutError -Fehlercode.
Die gleichen Änderungen gelten für das PositionSource QML-Objekt. Das Signal PositionSource::updateTimeout()
wird entfernt. Stattdessen wird die Eigenschaft PositionSource::sourceError mit einem PositionSource.UpdateTimeoutError
verwendet.
Überarbeitung der NMEA-Unterstützung
In Qt 5 hatten wir ein serielles NMEA-Positionierungs-Plugin und eine nmeaSource
-Eigenschaft im PositionSource -Objekt.
Das Plugin ermöglichte den Zugriff auf NMEA-Streams über die serielle Schnittstelle, während das QML-Objekt für das Lesen des NMEA-Streams aus einem TCP-Socket oder einer lokalen Datei verantwortlich war.
In Qt 6 haben wir alle diese Funktionen im Plugin vereint, das nun in nmea umbenannt wurde. Es ist nun in der Lage, mit allen drei NMEA-Datenquellen zu arbeiten: serielle Schnittstelle, TCP-Socket und lokale Datei. Siehe Plugin-Beschreibung für weitere Details.
Die Eigenschaft nmeaSource
des PositionSource Objekts ist nun entfernt.
Andere API-Änderungen
Dieser Abschnitt enthält API-Verbesserungen, die die Quellcode-Kompatibilität nicht beeinträchtigen. Sie können sich jedoch auf die Anwendungslogik auswirken, so dass es dennoch sinnvoll ist, sie zu kennen.
Fehler richtig zurücksetzen
In Qt 5 wurden die Fehler für die Klassen QGeoAreaMonitorSource, QGeoPositionInfoSource und QGeoSatelliteInfoSource nie zurückgesetzt. Dieses Verhalten ist nicht logisch, da der Aufruf von startUpdates()
, startMonitoring()
oder requestUpdates()
auf einer dieser Klassen oder deren Unterklassen effektiv den Start einer neuen Arbeitssitzung bedeutet, was bedeutet, dass wir uns nicht um vorherige Fehler kümmern sollten. Seit Qt 6 setzen wir den Fehler auf NoError
zurück, sobald eine der oben erwähnten Methoden aufgerufen wird.
Hinzufügen von QGeoAddress::streetNumber
Die Klasse QGeoAddress wird um die Eigenschaft streetNumber erweitert, die Informationen über die Straßennummer, den Gebäudenamen oder alles andere enthält, was zur Unterscheidung einer Adresse von einer anderen verwendet werden könnte. Verwenden Sie streetNumber() und setStreetNumber(), um von C++-Code aus auf diese Eigenschaft zuzugreifen.
Die QGeoAddress::street enthält jetzt nur noch den Straßennamen.
Dasselbe gilt für das Address QML-Pendant. Die Eigenschaft Address::street wird jetzt nur noch für den Straßennamen verwendet, während die Eigenschaft Address::streetNumber für andere wichtige Adressdetails verwendet wird.
Hinzufügen des Timeout-Arguments zu PositionSource::update()
Die timeout
wird in Millisekunden angegeben. Wenn timeout
gleich Null ist (der Standardwert), wird standardmäßig eine angemessene Zeitspanne für die Quelle verwendet.
Überarbeitung der Klassen QGeoSatelliteInfo, QGeoPositionInfo und QGeoAreaMonitorInfo
Diese Klassen verwenden nun QExplicitlySharedDataPointer in ihrer Implementierung. Das bedeutet, dass die Klassen Copy-on-Write implementieren. Das macht sie billig zu kopieren, so dass sie als Wert weitergegeben werden können.
Eine weitere Verbesserung ist das Hinzufügen von Unterstützung für effiziente Verschiebeoperationen.
Änderungen in der Qt Positioning Plugin-Implementierung
Dieser Abschnitt enthält Informationen über die Änderungen an der Plugin-Schnittstelle.
In Qt 5 for hatten wir zwei Versionen der Plugin-Schnittstelle:
QGeoPositionInfoSourceFactory
die die grundlegenden Funktionen bereitstellte.QGeoPositionInfoSourceFactoryV2
die die Basisklasse um die Möglichkeit erweiterte, benutzerdefinierte Parameter für die erstellten Objekte bereitzustellen.
In Qt 6 haben wir diese beiden Implementierungen zu einer einzigen verschmolzen, so dass nur noch die Klasse QGeoPositionInfoSourceFactory übrig blieb. Ihre Methoden erlauben nun die Übergabe von benutzerdefinierten Parametern.
Hinweis: Der Interface-Identifikator wurde aktualisiert, um die neue Hauptversion widerzuspiegeln. Verwenden Sie "org.qt-project.qt.position.sourcefactory/6.0"
in Ihren Qt Positioning Plugins.
Hier ist ein Beispiel für die Deklaration einer Plugin-Klasse:
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; };
© 2025 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.