변경 사항 Qt Positioning
Qt 6는 프레임워크를 보다 효율적이고 사용하기 쉽게 만들기 위한 의식적인 노력의 결과입니다.
각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하려고 노력합니다. 하지만 Qt를 더 나은 프레임워크로 만들기 위해 몇 가지 변경이 불가피했습니다.
이 주제에서는 이러한 변경 사항을 Qt Positioning 에 요약하고 이를 처리하기 위한 지침을 제공합니다.
공개 API 변경 사항 분석
이 섹션에는 소스 호환성을 깨는 API 변경에 대한 정보가 포함되어 있습니다.
QGeoPolygon::path() 이름 바꾸기
QGeoPolygon::path()
및 QGeoPolygon::setPath()
메서드의 이름이 각각 QGeoPolygon::perimeter() 및 QGeoPolygon::setPerimeter()로 변경됩니다. QML 측에서는 QGeoPolygon::perimeter 속성을 변경 없이 사용할 수 있습니다.
QGeoLocation 경계 영역에는 QGeoShape 사용
QGeoLocation 클래스와 Location QML 대응 클래스는 경계 영역에 QGeoRectangle 대신 QGeoShape 을 사용하도록 업데이트되었습니다.
C++
QGeoLocation::boundingBox()
및 QGeoLocation::setBoundingBox()
은 각각 QGeoLocation::boundingShape() 및 QGeoLocation::setBoundingShape()로 대체됩니다. 이제 QGeoShape 객체가 기본 데이터 저장소로 사용됩니다.
QML
QGeoLocation::boundingBox
속성은 QGeoLocation::boundingShape 으로 대체됩니다. 이 속성은 QtPositioning 6.2부터 사용할 수 있으므로 QML 파일에서 가져오기 버전을 업데이트해야 합니다.
import QtPositioning 6.2
QGeoShape::extendShape() 제거
QGeoShape::extendShape()
메서드는 Qt 5.9에서 더 이상 사용되지 않았고 Qt 6에서 최종적으로 제거되었습니다. 이러한 클래스에 이 기능이 필요한 경우 QGeoRectangle::extendRectangle() 및 QGeoCircle::extendCircle()을 사용하십시오.
신호 에러를 errorOccurred로 이름 변경
Qt 5에서는 여러 Qt Positioning 클래스에 error()
신호가 있었는데, 이는 error()
메서드와 충돌했습니다. Qt 6에서는 이러한 신호의 이름이 errorOccurred()
로 변경되었습니다:
QGeoAreaMonitorSource::error()
는 QGeoAreaMonitorSource::errorOccurred()로 이름이 변경되었습니다.QGeoPositionInfoSource::error()
는 QGeoPositionInfoSource::errorOccurred()로 이름이 변경되었습니다.QGeoSatelliteInfoSource::error()
는 QGeoSatelliteInfoSource::errorOccurred()로 이름이 변경되었습니다.
업데이트 시간 초과 신호 제거
Qt 5에서는 QGeoPositionInfoSource::updateTimeout()
및 QGeoSatelliteInfoSource::requestTimeout()
신호가 지정된 시간 내에 현재 위치 또는 위성 정보를 검색할 수 없는 경우를 알리기 위해 사용되었습니다. 이 신호는 Qt 6에서 제거되었습니다. 대신 새로운 오류 유형이 포함된 errorOccurred()
신호가 사용됩니다. 구체적으로
- QGeoPositionInfoSource 새로운 QGeoPositionInfoSource::UpdateTimeoutError 오류 코드와 함께 errorOccurred() 신호를 사용합니다.
- QGeoSatelliteInfoSource 새로운 QGeoSatelliteInfoSource::UpdateTimeoutError 오류 코드와 함께 errorOccurred() 신호를 사용합니다.
PositionSource QML 객체에도 동일한 변경 사항이 적용됩니다. PositionSource::updateTimeout()
신호가 제거되고 대신 PositionSource::sourceError 속성이 PositionSource.UpdateTimeoutError
와 함께 사용됩니다.
NMEA 지원 재설계
Qt 5에는 PositionSource 객체에 serialnmea 포지셔닝 플러그인과 nmeaSource
프로퍼티가 있었습니다.
플러그인은 직렬 포트를 통해 NMEA 스트림에 대한 액세스를 제공했고, QML 객체는 TCP 소켓 또는 로컬 파일에서 NMEA 스트림을 읽는 역할을 담당했습니다.
Qt 6에서는 이러한 모든 기능을 플러그인에 통합했으며, 플러그인의 이름은 이제 nmea로 변경되었습니다. 이제 직렬 포트, TCP 소켓, 로컬 파일 등 세 가지 NMEA 데이터 소스 모두에서 작업할 수 있습니다. 자세한 내용은 플러그인 설명을 참조하세요.
PositionSource 객체의 nmeaSource
속성이 이제 제거되었습니다.
기타 API 변경 사항
이 섹션에는 소스 호환성을 깨지 않는 API 개선 사항이 포함되어 있습니다. 그러나 애플리케이션 로직에 영향을 미칠 수 있으므로 알아두면 유용합니다.
오류를 올바르게 재설정
Qt 5에서는 QGeoAreaMonitorSource, QGeoPositionInfoSource 및 QGeoSatelliteInfoSource 클래스에 대한 오류가 재설정되지 않았습니다. 이러한 클래스 중 하나 또는 그 하위 클래스에서 startUpdates()
, startMonitoring()
또는 requestUpdates()
를 호출하는 것은 사실상 새로운 작업 세션을 시작하는 것을 의미하므로 이전 오류는 신경 쓰지 않아야 하므로 이 동작은 논리적이지 않습니다. Qt 6부터는 앞서 언급한 메서드 중 하나가 호출되면 오류를 NoError
로 재설정합니다.
추가 QGeoAddress::streetNumber
QGeoAddress 클래스는 streetNumber 속성으로 확장되어 도로 번호, 건물 이름 또는 주소를 다른 주소와 구별하는 데 사용될 수 있는 기타 정보를 보유합니다. C++ 코드에서 이 프로퍼티에 액세스하려면 streetNumber() 및 setStreetNumber()을 사용합니다.
이제 QGeoAddress::street 에는 도로명만 포함됩니다.
Address QML에도 동일하게 적용됩니다. Address::street 속성은 이제 도로명에만 사용되며 Address::streetNumber 속성은 다른 중요한 주소 세부 정보에 사용됩니다.
에 시간 초과 인수를 추가합니다. PositionSource::update()
timeout
은 밀리초 단위로 지정됩니다. timeout
가 0(기본값)이면 소스에 적합한 적절한 시간 초과 기간으로 기본값이 지정됩니다.
QGeoSatelliteInfo, QGeoPositionInfo 및 QGeoAreaMonitorInfo 클래스 리팩터링
이러한 클래스는 이제 구현에서 QExplicitlySharedDataPointer 을 사용합니다. 이는 클래스가 쓰기 시 복사를 구현한다는 의미입니다. 따라서 값으로 전달할 수 있도록 복사 비용이 저렴해집니다.
또 다른 개선 사항은 효율적인 이동 작업에 대한 지원이 추가된 것입니다.
Qt Positioning 플러그인 구현의 변경 사항
이 섹션에서는 플러그인 인터페이스의 변경 사항에 대한 정보를 제공합니다.
Qt 5에서는 두 가지 버전의 플러그인 인터페이스가 있었습니다:
QGeoPositionInfoSourceFactory
기본 기능을 제공하는QGeoPositionInfoSourceFactoryV2
기본 클래스를 확장하여 생성된 객체에 대한 사용자 정의 매개변수를 제공할 수 있는 기능을 제공했습니다.
Qt 6에서는 이 두 가지 구현을 하나로 합쳐 QGeoPositionInfoSourceFactory 클래스만 남겼습니다. 이제 이 클래스의 메서드에서 사용자 정의 매개변수를 전달할 수 있습니다.
참고: 인터페이스 식별자는 주요 버전 업데이트를 반영하도록 업데이트되었습니다. Qt Positioning 플러그인에서는 "org.qt-project.qt.position.sourcefactory/6.0"
을 사용하세요.
다음은 플러그인 클래스 선언의 예입니다:
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.