Auf dieser Seite

Änderungen an Qt Positioning

Qt 6 sind das Ergebnis bewusster Bemühungen, das Framework effizienter und benutzerfreundlicher zu gestalten.

Wir bemühen uns, bei jeder Version die Binär- und Quellkompatibilität für alle öffentlichen APIs aufrechtzuerhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.

In diesem Abschnitt fassen wir diese Änderungen in „ Qt Positioning “ zusammen und geben Hinweise zu deren Handhabung.

Änderungen an öffentlichen APIs, die die Kompatibilität beeinträchtigen

Dieser Abschnitt enthält Informationen zu API-Änderungen, die die Quellcode-Kompatibilität beeinträchtigen.

Umbenennung von QGeoPolygon::path()

Die Methoden „ QGeoPolygon::path() “ und „ QGeoPolygon::setPath() “ wurden in „ QGeoPolygon::perimeter()“ bzw. „ QGeoPolygon::setPerimeter()“ umbenannt. Auf der QML-Seite kann die Eigenschaft „ QGeoPolygon::perimeter “ ohne Änderungen verwendet werden.

Verwenden Sie „ QGeoShape “ für den Begrenzungsbereich von „ QGeoLocation “

Die Klasse „ QGeoLocation “ und ihr QML-Pendant „ Location “ wurden aktualisiert, sodass nun „ QGeoShape “ anstelle von „ QGeoRectangle “ für den Begrenzungsbereich verwendet wird.

C++

Die Klassen „ QGeoLocation::boundingBox() “ und „ QGeoLocation::setBoundingBox() “ werden durch „ QGeoLocation::boundingShape()“ bzw. „ QGeoLocation::setBoundingShape()“ ersetzt. Als zugrunde liegender Datenspeicher wird nun ein „ QGeoShape “-Objekt verwendet.

QML

Die Eigenschaft „ QGeoLocation::boundingBox “ wird durch „ QGeoLocation::boundingShape “ ersetzt. Diese Eigenschaft ist seit QtPositioning 6.2 verfügbar; stellen Sie daher sicher, die Importversion in den QML-Dateien zu aktualisieren.

import QtPositioning 6.2

Entfernen von QGeoShape::extendShape()

Die Methode ` QGeoShape::extendShape() ` wurde in Qt 5.9 als veraltet markiert und in Qt 6 endgültig entfernt. Verwenden Sie ` QGeoRectangle::extendRectangle()` und ` QGeoCircle::extendCircle()`, wenn Sie diese Funktionalität für diese Klassen benötigen.

Signal „error“ in „errorOccurred“ umbenennen

In Qt 5 verfügten mehrere „ Qt Positioning “-Klassen über das Signal „ error() “, was zu Konflikten mit der Methode „ error() “ führte. In Qt 6 haben wir diese Signale in „ errorOccurred() “ umbenannt. Im Einzelnen:

Entfernen der Update-Timeout-Signale

In Qt 5 wurden die Signale „ QGeoPositionInfoSource::updateTimeout() “ und „ QGeoSatelliteInfoSource::requestTimeout() “ verwendet, um Fälle zu melden, in denen die aktuelle Position oder Satelliteninformationen nicht innerhalb einer festgelegten Zeitüberschreitung abgerufen werden konnten. Diese Signale wurden in Qt 6 entfernt. Stattdessen werden die „ errorOccurred() “-Signale mit den neuen Fehlertypen verwendet. Im Einzelnen:

Die gleichen Änderungen gelten für das QML-Objekt „ PositionSource “. Das Signal „ PositionSource::updateTimeout() “ wurde entfernt. Stattdessen wird die Eigenschaft „ PositionSource::sourceError “ mit dem Wert „ PositionSource.UpdateTimeoutError “ verwendet.

Neugestaltung der NMEA-Unterstützung

In Qt 5 gab es ein „serialnmea “-Positionierungs-Plugin und eine „ nmeaSource “-Eigenschaft im „ PositionSource “-Objekt.

Das Plugin ermöglichte den Zugriff auf NMEA-Datenströme über den seriellen Anschluss, während das QML-Objekt für das Einlesen des NMEA-Datenstroms aus einem TCP-Socket oder einer lokalen Datei zuständig war.

In Qt 6 haben wir all diese Funktionen im Plugin zusammengeführt, das nun in „nmea“ umbenannt wurde. Es kann nun mit allen drei NMEA-Datenquellen arbeiten: serieller Schnittstelle, TCP-Socket und lokaler Datei. Weitere Details finden Sie in der Plugin-Beschreibung.

Die Eigenschaft „ nmeaSource “ des Objekts „ PositionSource “ wurde entfernt.

Weitere API-Änderungen

Dieser Abschnitt enthält API-Verbesserungen, die die Quellkompatibilität nicht beeinträchtigen. Sie können sich jedoch auf die Anwendungslogik auswirken, weshalb es dennoch sinnvoll ist, sich darüber zu informieren.

Fehler korrekt 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() “ bei einer dieser Klassen oder deren Unterklassen faktisch den Start einer neuen Arbeitssitzung bedeutet, sodass frühere Fehler keine Rolle mehr spielen sollten. Seit Qt 6 setzen wir den Fehler auf „ NoError “ zurück, sobald eine der oben genannten Methoden aufgerufen wird.

Hinzufügen QGeoAddress::streetNumber

Die Klasse „ QGeoAddress “ wurde um die Eigenschaft „ streetNumber “ erweitert, die Informationen über Hausnummern, Gebäudenamen oder andere Merkmale enthält, anhand derer sich Adressen voneinander unterscheiden lassen. Verwenden Sie „ streetNumber()“ und „ setStreetNumber()“, um im C++-Code auf diese Eigenschaft zuzugreifen.

Die Eigenschaft „ QGeoAddress::street “ enthält nun nur noch den Straßennamen.

Das Gleiche gilt für das QML-Pendant „ Address “. Die Eigenschaft „ Address::street “ wird nun ausschließlich für den Straßennamen verwendet, während die Eigenschaft „ Address::streetNumber “ für andere wichtige Adressdetails genutzt wird.

Fügen Sie das Timeout-Argument zu PositionSource::update()

„ timeout “ wird in Millisekunden angegeben. Ist „ timeout “ gleich Null (Standardwert), wird standardmäßig ein für die Quelle angemessener Timeout-Zeitraum verwendet.

Die Klassen „ QGeoSatelliteInfo “, „ QGeoPositionInfo “ und „ QGeoAreaMonitorInfo “ wurden überarbeitet

Diese Klassen verwenden nun „ QExplicitlySharedDataPointer “ in ihrer Implementierung. Das bedeutet, dass die Klassen „Copy-on-Write“ implementieren. Dadurch lassen sie sich kostengünstig kopieren, sodass sie als Wert übergeben werden können.

Eine weitere Verbesserung ist die zusätzliche Unterstützung für effiziente Move-Operationen.

Änderungen an der Implementierung des „ Qt Positioning “-Plugins

Dieser Abschnitt enthält Informationen zu den Änderungen an der Plugin-Schnittstelle.

In Qt 5 gab es zwei Versionen der Plugin-Schnittstelle:

  • QGeoPositionInfoSourceFactory die die grundlegenden Funktionen bereitstellten.
  • QGeoPositionInfoSourceFactoryV2 die die Basisklasse um die Möglichkeit erweiterte, benutzerdefinierte Parameter für die erstellten Objekte anzugeben.

In Qt 6 haben wir diese beiden Implementierungen zu einer zusammengefasst, sodass nur noch die Klasse „ QGeoPositionInfoSourceFactory “ übrig bleibt. Ihre Methoden ermöglichen nun die Übergabe benutzerdefinierter Parameter.

Hinweis: Die Schnittstellenkennung wurde aktualisiert, um der Aktualisierung der Hauptversion Rechnung zu tragen. 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 &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.