2

作成したカスタム QML 要素を、既に C++ からロードされている別の QML ビューに追加しようとしています。

コンテキストは次のとおりです。C++ から QML ビューを読み込んでおり、この QML ビューにビルドする別の QML カスタム コンポーネントを挿入する必要があります。すべて C++ で。

私は4時間探していましたが、これを達成する方法が見つかりませんでした.

より良い視点を提供するためのコードを次に示します。

QmlDocument *qml = QmlDocument::create("asset:///PosicionConsolidad.qml").parent(this);
qml->setContextProperty("pos", this);

Page *page = qml->createRootObject<Page>();
myST = GlobalST::getInstance();
LoadInfo();

_mRoot->push(page);
_app->setScene(_mRoot);

void Project::LoadInfo() {
    QmlDocument *qml = QmlDocument::create("asset:///customComponents/TableRow.qml").parent(this);
    //Here's where I need to append this new QML custom element to the 
    //page previously loaded.
    //I don't know if I can just inject it or I need to make a find child to 
    //maybe a parent container in the QML view and then add it there. But I 
    //also tried that and didn't work out.
}

助けてください。よろしく。

4

2 に答える 2

2

C++ でページとルート コンテナーを作成し、2 つの QML ファイルから他のすべてを追加することができます。ただし、実際には、findChild()呼び出しをページとコンテナーを作成するためのコードに置き換えます。おそらくそれだけの価値はありません。

于 2012-10-31T05:48:26.050 に答える
1

ええと、私はついにそれを通り抜ける方法を見つけました。Find Child 関数を使用して、QML が読み込まれたビューに属するコンテナーを取得し、必要な回数だけ QML カスタム コンポーネントを追加しました。

以下のコード:

Class::Constuctor(bb::cascades::Application *app,
        NavigationPane* mRoot) :
        QObject(app) {

    _app = app;
    _mRoot = mRoot;

    QmlDocument *qml =
            QmlDocument::create("asset:///PosicionConsolidad.qml").parent(this);
    qml->setContextProperty("pos", this);

    posicionConsolidadaPage = qml->createRootObject<Page>();
    _mRootContainer = posicionConsolidadaPage->findChild<Container*>("posicion_consolidadad");

    LoadInfo();

    _mRoot->push(posicionConsolidadaPage);
    _app->setScene(_mRoot);
}

void Class::LoadInfo() {

        QmlDocument *qml = QmlDocument::create(
                "asset:///customComponents/TableRow.qml").parent(this);
        Container *activesHeader = qml->createRootObject<Container>();

        AbsoluteLayout *pAbsoluteLayout = new AbsoluteLayout();
        activesHeader->setLayout(pAbsoluteLayout);

        AbsoluteLayoutProperties* pProperties = AbsoluteLayoutProperties::create();
        pProperties->setPositionX(0);
        pProperties->setPositionY(155);
        activesHeader->setLayoutProperties(pProperties);

        _mRootContainer->add(activesHeader);
}

それが役に立てば幸い。新しいコンポーネントを Page オブジェクトまたはそのようなものに直接追加する方法を誰かが知っている場合は、投稿してください:)

于 2012-10-29T22:27:45.273 に答える