【发布时间】:2015-11-12 12:09:10
【问题描述】:
我想要一个带有(水平)ListView 代表的(垂直)ListView。
水平代理应该同步滚动。为此,我在 ListViews 上放置了一个 Flickable,并将水平 ListView 的 contentX 绑定到 Flickable 的 contentX(对于垂直 ListView 的 contentY 也是如此)(注意:Here 描述了一种不同的方法用于同步 ListView 滚动,但这似乎在移动设备上存在性能问题)
下面的代码可以工作,但仍然存在以下问题
- 我没有在 Rectangle 中看到 onClicked(当我删除顶部的 Flickable 时我确实看到了)
- 我想要水平滑动或垂直滑动,但不能同时使用两者。我可以通过设置
flickableDirection: Flickable.HorizontalFlick来限制顶部 Flickable 的轻弹,但是我不能再垂直轻弹(我希望 Flickable 会将未使用的鼠标事件传递给垂直 ListView,但这似乎不会发生)
关于如何解决这些问题的建议?
任何帮助表示赞赏!
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
}
}
【问题讨论】:
标签: qt listview mouseevent qml