Qt ポジショニングの変更
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() を使用してください。
シグナル error の名前を errorOccurred に変更
Qt 5 では、複数の Qt Positioning クラスがerror()
シグナルを持っていて、error()
メソッドと衝突していました。Qt 6 では、これらのシグナルの名前をerrorOccurred()
に変更しました:
QGeoAreaMonitorSource::error()
の名前を () に変更しました。QGeoAreaMonitorSource::errorOccurredQGeoPositionInfoSource::error()
の名前を () に変更しました。QGeoPositionInfoSource::errorOccurredQGeoSatelliteInfoSource::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.UpdateTimeoutError
を持つPositionSource::sourceError プロパティが使用されます。
NMEA サポートの再設計
Qt 5では、serialnmeaポジショニングプラグインと、PositionSource オブジェクトのnmeaSource
プロパティがありました。
プラグインはシリアルポート経由での NMEA ストリームへのアクセスを提供し、QML オブジェクトは TCP ソケットまたはローカルファイルからの NMEA ストリームの読み込みを担当していました。
Qt 6 では、これらの機能をすべてプラグインに統合し、nmea という名前に変更しました。このプラグインはシリアルポート、TCPソケット、ローカルファイルの3つの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 は現在、通り名のみを保持しています。
QML のAddress も同様です。Address::street プロパティは通り名のみに使用され、Address::streetNumber プロパティはその他の重要な住所の詳細に使用されます。
にタイムアウト引数を追加しました。PositionSource::update()
timeout
はミリ秒単位で指定します。timeout
がゼロ (デフォルト値) の場合、ソースに適した妥当なタイムアウト時間がデフォルトになります。
QGeoSatelliteInfo 、QGeoPositionInfo およびQGeoAreaMonitorInfo クラスをリファクタリングします。
これらのクラスは、実装でQExplicitlySharedDataPointer を使用するようになりました。これは、これらのクラスがコピー・オン・ライトを実装していることを意味します。これは、クラスがコピー・オン・ライトを実装していることを意味します。
もう一つの改良点は、効率的な移動操作のサポートです。
Qt Positioning プラグイン実装の変更点
このセクションでは、プラグインインターフェイスの変更点について説明します。
Qt 5 では、プラグインインターフェースに 2 つのバージョンがありました:
QGeoPositionInfoSourceFactory
基本的な機能を提供するもの。QGeoPositionInfoSourceFactoryV2
Qt 6 では、プラグイン・インターフェースを統合しました。
Qt 6 では、この 2 つの実装を 1 つに統合し、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; };
ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。