Qt 如何使用.qml页面设置容器内容?
我正在使用BB Native SDK开发Blackberry 10移动应用程序 我只想设置一个动态的'Container',它是如下(main.qml)所示的特定(.qml)页面的一部分,该页面将通过选择从资产中填充不同的qml页面(例如“content1.qml”) 可能吗?如果是的话,我怎么做Qt 如何使用.qml页面设置容器内容?,qt,blackberry,qml,blackberry-10,Qt,Blackberry,Qml,Blackberry 10,我正在使用BB Native SDK开发Blackberry 10移动应用程序 我只想设置一个动态的'Container',它是如下(main.qml)所示的特定(.qml)页面的一部分,该页面将通过选择从资产中填充不同的qml页面(例如“content1.qml”) 可能吗?如果是的话,我怎么做 main.qml: import bb.cascades 1.2 Page { Container { layout: DockLayout {} //To
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"
}
}
首先,您需要为content1.qml中的容器提供一个id,比如说id:container1 由于容器是控件(容器继承自控件),您只需将container1添加到selectedCont:
selectedCont.removeAll();
selectedCont.add(content1.container1);
selectedCont.replace(0, content1.container1);
如果在selectedCont中已有容器,也可以使用replace:
selectedCont.removeAll();
selectedCont.add(content1.container1);
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>();
QmlDocument*qml1=QmlDocument::create(“asset:///container1.qml)母公司(本公司);
Container*container1=qml1->createRootObject();
要获取指向selectContObj的指针,您可以执行以下操作:
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
AbstractPane *root = qml->createRootObject<AbstractPane>();
Container* selectCont = root->findChild<bb::cascades::Container*>("selectContObj");
QmlDocument*qml=QmlDocument::create(“asset:///main.qml)母公司(本公司);
抽象窗格*root=qml->createRootObject();
容器*selectCont=root->findChild(“selectContObj”);
您可以使用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"
谢谢!但是如何在C++中使用呢?我找不到包含“ControlDelegate”组件的库的引用->我尝试了这一个“bb::cascades::ControlDelegate”,如本文所述,但他仍然找不到,我恐怕我只使用了QML方法。我找不到任何在C++中使用它的例子。确保您拥有SDK的最新10.2版本。如果您使用的是10.1或更旧版本,它可能不支持controlDelegate.Thx!!但你能解释得更多吗?我想用C++做。我给C++增加了答案。非常感谢你。