我想使水平listView充当另一个veritcal listView的委托(delegate),我编写了以下代码:
import Qt 4.7
Item {
id:main
width: 360
height: 640
Component{
id:myDelegate
ListView{
id:list2
spacing: 5
width:list.width
height:list.height/3
interactive: true
orientation: ListView.Horizontal
model: ListModel {
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
}
delegate: Text{text:name
width: main.width/3}
focus: true
MouseArea {
anchors.fill: parent
onClicked: {
ListView.list2.currentIndex = ListView.list2.indexAt(mouseX, mouseY)
}
}
}
}
ListView {
id: list
clip: true
spacing: 5
anchors.fill: parent
orientation: ListView.Vertical
model: Model{}
delegate:myDelegate
// highlight: Rectangle {
// width: list.currentItem.width
// color: "lightsteelblue"
// radius: 5
// }
focus: true
MouseArea {
anchors.fill: parent
onClicked: {
list.currentIndex = list.indexAt(mouseX, mouseY)
}
}
}
}
垂直 ListView 滚动良好,而水平 ListView 不滚动。
有什么帮助吗?
谢谢
最佳答案
我尝试了一次,但没有成功,外部列表处理了所有事件。解决方案是在ListViews之外另外具有Flickable,并将水平列表的contentX和垂直列表的contentY anchor 定到Flickable的contentX和contentY。
一些半完整的代码来显示原理:
Item {
ListView {
anchors.fill: parent
clip: true
orientation: ListView.Vertical
interactive: false
contentY: listController.contentY
delegate: ListView {
orientation: ListView.Horizontal
interactive: false
contentX: listController.contentX
}
}
Flickable {
id: listController
anchors.fill: parent
contentHeight: vert.contentHeight
contentWidth: horizontalElement.width
}
}
关于qt - 在qml中的垂直 ListView 中的水平 ListView ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7832632/