2016-12-10 3 views
0

Map.qml(Window {... Map {...}})を使用してマップ(OpenStreetMaps)を表示しました MapQuickItemに基づくMarker.qmlファイルがあります。このマーカーを静的にマップに配置すると、すべてがOKです。{{マーカー{params}}。QMLマップ適切なマーカーのインスタンス化

私はN個のマーカーを配置したいと思います(それには必ずコードと他のパラメーターがあります)。 somefile.txtで定義されたマーカーのパラメータで、このファイルはC++を使用して解析されます。

質問は正しい/より速く/正しくインスタンス化し、解析されたポイントをマップに配置する方法ですか? addMarker(position、name){map.addMapItem(?)}のようにMap.qmlでメソッドを実行する必要がありますか? または、C++のみを使用してこのマーカーを配置する必要がありますか?getマップコンテナを使用し、addMapItemを「マップ投影」クラスで呼び出しますか?

このパイプラインを理解してください。

+0

C + +でデータを解析すると、C++のインスタンス項目にも論理的になります。そして、この方法は私が推測する最も速いものです。 – folibis

+0

私が調査したところでは、C++のマップとはやりとりできません(Qtのドキュメントではこれを述べています)。今、私はaddMarker(name、position)をC++から呼び出そうとしていますが、QMLはオブジェクトとplacecをマップ上に作成します –

答えて

2

あなたが探しているものはMapItemViewだと思います。

あなたのC++コードは、MapItemViewへの入力として使用されるモデルを介してマーカー情報(場所、名前など)を提供します。 ビューは、モデル内の各エントリのマップビュー項目を作成し、それを親マップに配置します。

たとえば、http://doc.qt.io/qt-5/location-places-qml.html#display-search-results-using-a-mapitemviewを参照してください。

あなたのC++コードは、実行時にモデルを修正することができます。エントリの追加または削除、エントリのデータの変更。

+0

QMLを使ってすべてを配置する必要があります(オブジェクトにMarker.qmlをインスタンス化し親マップに追加する必要があります)。したがって、C++コードは(QMetaObject :: invokeMethodを使用して)addMarker QMLメソッドなどを呼び出します。 –

+0

はい、QMLでマーカーを処理しますが、C++からは何も呼び出しません。 アプリケーションのC++部分は、マーカーに必要なデータを提供します。座標、名前など これを行う1つの方法はモデルです。 'QAbstractItemModel'から派生したカスタムクラスです。一般的な考え方については、http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.htmlを参照してください。唯一の違いは、 'ListView'の代わりに' MapItemView'を使用していることです。 –

+0

はい、私は今日試してみます。しかし、私の修正が動的であれば、私は静的修正リストと動的修正リストを作成して更新する必要があります。私が読んだとおり、QMLが新しいデータを得るように私はdataChangedを発行する必要があります。右? –

関連する問題