我正在使用BB Native SDK开发Blackberry 10移动应用程序。
我想要的只是设置一个动态'容器',它是特定(.qml)页面的一部分,如下所示( main.qml ),通过选择来填充来自资产的不同qml页面(例如“ content1.qml ”)
这可能吗?如果是的话,我该怎么做?
main.qml:
import bb.cascades 1.2
Page {
Container {
layout: DockLayout {}
//Todo: fill me with QML
Header {
title: "Hello Boys ;)"
horizontalAlignment: HorizontalAlignment.Fill
verticalAlignment: VerticalAlignment.Top
}
Container {
id: selectedCont
objectName: "selectedContObj"
}
Footer {
title: "Hi Girls ;)"
horizontalAlignment: HorizontalAlignment.Fill
verticalAlignment: VerticalAlignment.Bottom
}
}
}
content1.qml :
Container {
Label{
text: "Hello World"
}
Button {
text: "Submit"
}
Button {
text: "Cancel"
}
}
答案 0 :(得分:1)
首先,您需要在content1.qml中为您的Container提供一个ID,假设 id:container1 。
由于Container是一个Control(Container继承自Control),您只需将container1添加到selectedCont:
selectedCont.removeAll();
selectedCont.add(content1.container1);
如果在selectedCont中已有容器,也可以使用replace:
selectedCont.replace(0, content1.container1);
这假设main.qml和content1.qml在同一个文件夹中。
如果要从C ++实现相同功能,则需要使用以下命令加载qml文件:
QmlDocument *qml1 = QmlDocument::create("asset:///container1.qml").parent(this);
Container* container1 = qml1->createRootObject<Container>();
要获得指向selectContObj的指针,您可以执行以下操作:
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
AbstractPane *root = qml->createRootObject<AbstractPane>();
Container* selectCont = root->findChild<bb::cascades::Container*>("selectContObj");
答案 1 :(得分:1)
您可以使用ControlDelegate。这些旨在用qml文件替换内容。
Container {
layout: DockLayout {}
Header {
title: "Hello Boys ;)"
horizontalAlignment: HorizontalAlignment.Fill
verticalAlignment: VerticalAlignment.Top
}
ControlDelegate {
id: selectedContDelegate
}
Footer {
title: "Hi Girls ;)"
horizontalAlignment: HorizontalAlignment.Fill
verticalAlignment: VerticalAlignment.Bottom
}
}
然后在您的按钮或您想要更改的位置执行此操作:
selectedContDelegate.source = "Content1.qml"