QML ListView或GridView:框中的项目的diplay列表

时间:2018-04-19 16:26:26

标签: qt listview gridview qml qt5

有没有办法在QML中创建它? enter image description here

类似于具有水平流的ListView(直到它达到总宽度,然后它继续在下一行)。

ListView {
    anchors.fill: parent
    layoutDirection: Qt.Horizontal
    width: container.width; height: implicitHeight
    model: ListModel{ id: contactListModel }
    delegate: contactComponent
}

上述代码的问题在于它没有考虑宽度的限制。

或者像GridLayout一样,但没有定义列数或行数。

Flickable {
    anchors.fill: parent
    contentHeight: grid.height
    contentWidth: container.width

    GridLayout {
        id: grid
        columns: 3
        width: container.width; height: implicitHeight
        columnSpacing: 0; rowSpacing: 0
        Repeater {
            model: ListModel{ id: contactListModel }
            delegate: contactComponent
        }
    }
}

这里的问题是,如果我没有定义多个列或行,那么无论总宽度如何,它都会继续水平添加项目。而且,间距......

谢谢,

2 个答案:

答案 0 :(得分:3)

Flow就是您所需要的。

如果你想让它变得可以被scrolable,你可以把它包裹在Flickable中(就像你对GridLayout所做的那样)。

Flickable {
    anchors.fill: parent
    contentWidth: width
    contentHeight: flow.implicitHeight    
    Flow {
        id: flow
        width: parent.width
        spacing: 5
        Repeater {
            model: ListModel{ id: contactListModel }
            delegate: contactComponent
        }
    }
}

答案 1 :(得分:0)

您可以尝试QML Flow类型。我不认为基于Widget的系统有这个等价的类。 http://doc.qt.io/qt-5/qml-qtquick-flow.html#details