我想要一个(垂直)ListView与(水平)ListView委托 .
水平代表应同步滚动 . 为此,我将一个Flickable放在ListViews的顶部,并将水平ListView的contentX绑定到Flickable的contentX(对于垂直ListView的contentY也是如此)(注意:Here描述了一个不同的方法)同步ListView滚动,但这似乎在移动设备上有性能问题)
下面的代码有点工作,但仍然有以下问题
-
我没有得到矩形中的onClicked(当我删除顶部Flickable时我确实得到了它)
-
我想要水平轻弹或垂直轻弹,但不能同时进行 . 我可以通过设置
flickableDirection: Flickable.HorizontalFlick
来限制顶部Flickable的轻弹,但是我似乎可以't flick vertically anymore (I was hoping that the Flickable would pass on unused mouse events to the vertical ListView but this doesn' t)
关于如何解决这些问题的建议?
任何帮助赞赏!
import QtQuick 2.0
Item {
id: main
visible: true
width: 600
height: 600
ListView {
id: verticalList
width: parent.width;
height: parent.height;
contentY : flickable.contentY
anchors.fill: parent
spacing: 10
orientation: ListView.Vertical
model: 100
delegate:
ListView {
id: horizontalList
width: parent.width;
height: 100;
contentX : flickable.contentX
spacing: 10
orientation: ListView.Horizontal
model: 20
property var verticalIndex : index
delegate:
Rectangle
{
property var colors : ['red', 'green', 'blue']
property var widths : [100, 200, 300]
height: 100
width: widths[(verticalIndex + model.index) % widths.length]
color: colors[model.index % colors.length]
MouseArea {
anchors.fill: parent
onClicked: {
console.log("Rectangle.onClicked")
}
}
}
}
}
//on top a Flickable
Flickable {
id: flickable
height: parent.height
width: parent.width
contentHeight: 100*100 //nrOfRows * rowHeight
contentWidth: 20*300 //nrOfEvent * max/averageEventWidth
}
}
3 回答
我'm not giving you a perfect solution, but it'正在工作 . 当您在
ListView
的顶部使用Flickable
时,您无法与其进行交互 . 所以,我已经Flickable
使用ListView
并且contentX
和ListView
的contentX
,但是这导致了一个循环并且我正在获得所需的行为 .EDIT
所以,我没有使用
ListView
作为垂直列表,而是使用了Repeater
和Column
并使用了属性绑定 . 它现在运作良好 .以下是更新版本 .
以下确实有效,但最初的尝试似乎更优雅 .
我仍需要在轻弹时比较性能(fps),尤其是在移动设备上 . 我也得到“绑定循环”警告,但我认为它们是误报 .
我最初的尝试需要进行以下修改
将
Flickable
限制为flickableDirection : Flickable.HorizontalFlick
并删除verticalList
上的contentY : flickable.contentY
通过这样做,没有垂直滚动了 . 这可以通过在
ListView
内移动Flickable
来修复通过将以下
MouseArea
添加到Flickable
收到onClicked
事件例如 .