基于ListModel计数动态创建页面

时间:2016-10-17 12:50:01

标签: qt qml grid-layout loader

我是初学者QT / QML应用程序开发

如何根据ListModel计数动态创建qml。 在视图中,我使用Repeater在GridLayout中列出了modelObjects。

Item{
      id:griditem
      anchors.fill:parent

          GridLayout{
               id: grid2
               x:145
               y:30
               Layout.preferredHeight: 480
               Layout.preferredWidth: 1135
               rowSpacing:10
               columnSpacing:40

               columns: 3
               rows: 2

               Repeater{
                   id: repeater_Id
                   model: FeatureModel{}

                   Loader{
                       id: loader_Id

                       source: "QuadTiles.qml"
                       onLoaded: {
                             loader_Id.item.nIndex=index
                             loader_Id.item.type_String = type

                             loader_Id.item.title_Text.text = title
                             loader_Id.item.description_Text.text = description
                             loader_Id.item.btn1_icon.source = icon1

                       }
                   }
               } //Repeater
          }//GridLayout
  }

修改: 我正面临一些问题 我需要根据ModelList计数动态创建新视图。每个页面在GridLayout

中最多有6个项目(3行和2列)

'QuadTiles.qml'是加载到GridLayout的每个项目的qml文件

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:
lm是要分割的ListModel

SwipeView {
    width: 200
    height: 800
    clip: true
    currentIndex: 0

    Repeater {
        model: Math.ceil(lm.count / 6)
        delegate:            ListView {
            width: 200
            height: 800
            property int viewIndex: index
            model: DelegateModel {
                model: lm
                groups: DelegateModelGroup { name: 'filter' }
                Component.onCompleted: {
                    for (var i = viewIndex * 6; i < lm.count && i < (viewIndex * 6) + 6; i++) {
                        items.setGroups(i, 1, ['items', 'filter'])
                    }
                }

                filterOnGroup: 'filter'

                delegate: Rectangle {
                    width: 180
                    height: 30
                    border.width: 1
                    Text {
                        anchors.centerIn: parent
                        text: index
                    }
                }
            }
        }
    }
}

不要使用Loader作为代理人。委托是动态实例化的,因此Loader只是无用的开销。您可以在代理中使用Loader来获取通常未显示的部分。