2014-12-03 85 views
2

我有一个QML C++项目,其中C++部分绑定后端和QML用户界面之间的连接。覆盖QML文件中设置的ListModel

我设置了一个QObject的子类,它有一个QAbstractListModel属性作为上下文属性。

我的一个组件在qml文件中预定义了一个List模型。我想用我自己的列表模型替换它。但是如果context属性没有设置,我想保留这个模型。这使我可以在没有C++部分的情况下运行本程序。 将模型设置为上下文属性并未进行剪切,因为本地模型会超出上下文属性。

我QML看起来像

Rectangle { 
id: root_rect 
objectName: "root_rect" 
width: 300 
height: 300 
color: "#dbdbdb" 

ListModel { 
       id: myModel 
       ListElement { 
        name: "foo1" 
        fin: "bar1" 
       } 

       ListElement { 
        name: "foo2" 
        fin: "bar2" 
       } 
      } 

Rectangle { 
    id: list_bg 
    color: "#ffffff" 
    clip: true 
    anchors.top: parent.top 
    anchors.topMargin: 10 
    anchors.bottom: parent.bottom 
    anchors.bottomMargin: 10 
    anchors.left: parent.left 
    anchors.leftMargin: 10 
    anchors.right: parent.right 
    anchors.rightMargin: 10 

    ListView { 
     id: list_view1 
     anchors.fill: parent 
     delegate: Item { 
      x: 5 
      height: 40 
      Row { 
       id: row1 
       spacing: 10 

       Text { 
        text: name+" "+fin 
        anchors.verticalCenter: parent.verticalCenter 
        font.bold: true 
       } 
      } 
     } 
     model: myModel 
     //model: myObject.myModel 
    } 
} 
} 

是否可以兼得,在QML文件模型在设计和GUI测试和疼痛自由改写默认值的显示,如果我设置myObject的作为上下文属性?

编辑:我使用QT 4 QtQuick 1.1

回答

3

我不知道这工作,QtQuick 1,但你可以依靠的例外处理。类似这样的工作与QtQuick 2:

ListView { 
    id: list_view1 
    anchors.fill: parent 
    delegate: Item { 
     ... 
    } 
    model: myModel 
    Component.onCompleted:{ 
     try{ 
      model = myObject.myModel 
     } 
     catch(exception){ 
      console.log("myObject unknown, switching to default model") 
      model = myModel 
     } 
    } 
} 
+0

谢谢,这是非常有用的。 为了保持在编辑器中看到默认数据的能力,我在onCompleted块之前添加了'model = myModel'这一行 – 2014-12-04 09:05:18