上下文如下:我正在从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.
}
请帮忙。问候。
答案 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对象或类似的东西,请发布它:)