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++ 中创建 Page 和根容器,然后从两个 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 回答