如何使用.qml页面设置容器内容?

时间:2013-11-20 16:43:36

标签: qt blackberry qml blackberry-10

我正在使用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"
    }
}

2 个答案:

答案 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"