Qt 如何使用.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

我正在使用BB Native SDK开发Blackberry 10移动应用程序

我只想设置一个动态的'Container',它是如下(main.qml)所示的特定(.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"
    }
}

首先,您需要为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++增加了答案。非常感谢你。