0

C++ で記述された既存の QT プロジェクトがあり、既存の UI に mapViewer サンプル プロジェクトのようなものを追加したいと考えています。mapViewer をインスタンス化する方法と、それを初期化/表示するメソッドを呼び出す方法がわかりません。オンライン ヘルプに続いて、UI 要素に追加できる QQuickWidget を返す以下の関数を考え出しました。作成されたコンポーネントの準備ができていないというエラーが発生し続けるため、関数は機能しません。

QQuickWidget *buildMap(QWidget *parent)
{
    QQmlEngine *engine = new QQmlEngine;
    QQmlComponent component(engine, "qrc://mapviewer.qml");

    QObject *object = component.create();
    QMetaObject::invokeMethod(object, "initializeMap");

    QQuickWidget *map = new QQuickWidget(engine, parent);
    return map;
}

mapViewer コンポーネントを使用してオブジェクトを作成し、それを単に忘れているということは、あまり意味がありませんが、オンラインで見つけた例には、これに似たフローがあります。

4

1 に答える 1

0

代わりに次のようにしてみてください。

QQuickWidget *buildMap(QWidget *parent) {
    QQuickWidget *map = new QQuickWidget(parent);
    map->setSource(QUrl("qrc://mapviewer.qml"));
    map->show();
    return map;
}

メソッドに関しては、多分それを'sinitializeMapで呼び出しますか?C++ から呼び出すことを主張する場合でも、オブジェクトを介して取得できます。mapviewer.qmlonCompletedmap->rootObject()

また、C++ や QML からコンポーネントやオブジェクトを作成するときは、ステータスを確認し、エラー文字列があればそれを出力することをお勧めします。 .

于 2016-02-06T22:02:47.863 に答える