2016-10-17 5 views
1

Я начинающий разработки приложений QT/QMLДинамически создавать страницы на основе ListModel COUNT

Как я могу создать QML динамически на основе подсчета ListModel. В представлении я перечисляю modelObjects в GridLayout, используя Repeater.

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 
    } 

Edit: я столкнулся некоторые проблемы мне нужно создать новые представления динамически на основе подсчета ModelList. Каждая страница с максимальной 6 пункта (3 строки и 2 столбца) в GridLayout

«QuadTiles.qml» является QML файл, который нагрузка для каждого элемента GridLayout

+0

Я полностью не понимаю, что вы пытаетесь достичь. Что такое * страница *? И почему вы используете «Loader»? – derM

+0

@derM: Я хочу динамически создавать представления. Каждый вид имеет сетку, и каждая сетка вмещает до 6 элементов. Если количество элементов больше 6, мне нужно отобразить элемент в другом представлении с помощью индикатора Swipe и страницы. –

ответ

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 в своем делегате для частей, которые обычно не отображаются.

+0

Благодарим вас за поддержку. –

+0

В swipeView я создал GridViews динамически. Но я столкнулся с проблемой, прокручивая второй вид в SwipeView. То есть, пока прокручивается до 2-й страницы, отображается первое содержимое экрана. Как я могу исправить проблему. –

+0

set 'clip: true' – derM

Смежные вопросы