2016-06-01 42 views
1

我想将水平列表视图作为垂直列表视图的代表。是否有可能附加不同的模型水平listview从C + +?垂直列表视图中水平列表视图的模型

ListView { 
      id: eventList 
      model: N (N tells how many horizontal lists are there) 
      delegate: 
       ListView { 
       id: horizontall 
       model: ?? // How to attach different model from C++ to each horizontal list 
       orientation: ListView.Horizontal 

在C++中部分我的QList列表implementet N个从它们QAbstractlistmodel

衍生

回答

0

是的,它是可能的。制作ListModel包含另一个ListModel是不可能的。至少在QML中是不可能的。

这里是如何使它快速和肮脏的例子。它能解决你的问题吗?

import QtQuick 2.4 
import QtQuick.Controls 1.4 
import QtQuick.Layouts 1.1 
import QtQuick.Controls.Styles 1.4 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    width: 640 
    height: 480 

    ListModel { 
     id: listModel 
     ListElement {slmIndex: 0} 
     ListElement {slmIndex: 1} 
     ListElement {slmIndex: 2} 
     ListElement {slmIndex: 3} 
     ListElement {slmIndex: 4} 
     ListElement {slmIndex: 5} 
    } 

    ListModel { 
     id: model1 
     ListElement { name: "1" } 
    } 
    ListModel { 
     id: model2 
     ListElement { name: "1" } 
     ListElement { name: "2" } 
    } 
    ListModel { 
     id: model3 
     ListElement { name: "1" } 
     ListElement { name: "2" } 
     ListElement { name: "3" } 
    } 
    ListModel { 
     id: model4 
     ListElement { name: "1" } 
     ListElement { name: "2" } 
     ListElement { name: "3" } 
     ListElement { name: "4" } 
    } 
    ListModel { 
     id: model5 
     ListElement { name: "1" } 
     ListElement { name: "2" } 
     ListElement { name: "3" } 
     ListElement { name: "4" } 
     ListElement { name: "5" } 
    } 
    ListModel { 
     id: model6 
     ListElement { name: "1" } 
     ListElement { name: "2" } 
     ListElement { name: "3" } 
     ListElement { name: "4" } 
     ListElement { name: "5" } 
     ListElement { name: "6" } 
    } 
    property var secondLayerModels: [ 
     model1, model2, model3, model4, model5, model6 
    ] 

    ListView { 
     anchors.centerIn: parent 
     width: 200 
     height: 200 
     clip: true 
     model: listModel 
     orientation: ListView.Vertical 
     delegate: ListView { 
      width: 200 
      height: 50 
      model: secondLayerModels[slmIndex] 
      orientation: ListView.Horizontal 
      delegate: Rectangle { 
       width: 50 
       height: 50 
       border.color: "black" 
       Text { 
        anchors.fill: parent 
        verticalAlignment: Text.AlignVCenter 
        horizontalAlignment: Text.AlignHCenter 
        text: name 
       } 
      } 
     } 
    } 
} 

我不知道,如果这个答案完全覆盖的问题。它不包括如何创建将公开其他模型的C++模型。

+1

嵌套'ListModel's可以通过'attributes',参见[这里](http://stackoverflow.com/a/34358794/2538363)和相关链接。这就是说,在我看来,嵌套模型是一种不必要的复杂性增加。我会注册C++模型,然后用'Flickable' +'Repeater'在自定义视图中使用它们。在更动态的设置中,例如如果C++模型的数量可以大幅度变化,那么最好有一个独特的类来暴露模型的数量并授予对它们的访问权限。只是我的两分钱。 – BaCaRoZzo

+0

@Filip嗨,问题是我不知道我会有多少模型 - 这取决于C++中的一些数据。 我知道可以将ListElement添加到ListModel,但我无法找到合适的方式来创建N个ListModels,然后向每个模型添加元素。在例子中,你使用属性var secondLayerModels硬编码了6个模型。 BaCaRoZzo:我已经尝试使用ListView内部转发器,它也适用于模型数组,并获取每个模型由于索引。你知道我问菲利普什么吗?这似乎是一个简单的问题,但我无法达成解决方案。 – iTwo