使用C ++将QML元素动态添加/插入到QML视图中

时间:2012-10-29 20:18:29

标签: c++ qt qml blackberry-10 blackberry-qnx

我试图将我创建的自定义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.
}

请帮忙。问候。

2 个答案:

答案 0 :(得分:2)

您可以在C ++中创建页面和根容器,然后从两个QML文件中添加其他所有内容。但实际上,用代码替换findChild()调用以创建页面和容器。可能不值得。

答案 1 :(得分:1)

好吧,我终于找到了一条通过它的方法,这不是更清洁或最美的。我使用Find Child函数获取属于QML加载视图的Container,然后根据需要多次添加我的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对象或类似的东西,请发布它:)