我使用model-view-delegate范例实现了一个简单的QML应用程序。在我的应用程序中,我使用highlight
属性为我ListView
的当前所选项加下划线。选择工作正常,但是当我点击远处的项目时,突出显示的移动速度非常慢。
考虑以下示例:
import QtQuick 2.5
ApplicationWindow {
width: 500
height: 400
title: qsTr("List test")
visible: true
ListView {
id: view
anchors.fill: parent
model: 20
delegate: Rectangle {
border.color: "steelblue"
color: Qt.lighter(border.color)
width: ListView.view.width
height: 20
Text { anchors.centerIn: parent; z: 2; text: index + 1 }
MouseArea {
anchors.fill: parent
onClicked: view.currentIndex = index
}
}
highlight: Rectangle {
border.color: "yellow"
border.width: 3
color: "transparent"
height: 20
width: ListView.view.width
z: Infinity
}
}
}
如果选择最后一个元素,突出显示将移动到所有其他项目,然后再到达所选项目。那不是我期望的行为。如何将突出显示直接移到最后?
答案 0 :(得分:3)
根据highlightFollowsCurrentItem
的文档,您所遇到的行为是预期的行为:
此属性用于确定突出显示是否由视图管理。
如果此属性为true(默认值),则会突出显示突出显示以跟随当前项。否则,视图不会移动突出显示,并且必须通过突出显示任何移动。
高亮动画由highlightMoveDuration
和highlightMoveVelocity
属性控制。速度设置为400 pixels/second
,这个值可以与具有长视图的高密度设备上的长时间运行动画相对应。
您可以通过两种不同的方式解决问题:
highlightMoveDuration
或高highlightMoveVelocity
)highlightFollowsCurrentItem
设置为false
并直接管理突出显示动画在第二种情况下,您放弃动画并直接将突出显示y
位置与当前所选代理的y
绑定。这样,突出显示会立即移动到选定的代理,如下例所示:
import QtQuick 2.5
ApplicationWindow {
width: 500
height: 400
title: qsTr("List test")
visible: true
ListView {
id: view
anchors.fill: parent
model: 20
highlightFollowsCurrentItem: false // force discarding default animation
delegate: Rectangle {
border.color: "steelblue"
color: Qt.lighter(border.color)
width: ListView.view.width
height: 20
Text { anchors.centerIn: parent; z: 2; text: index + 1 }
MouseArea {
anchors.fill: parent
onClicked: view.currentIndex = index
}
}
highlight: Rectangle {
border.color: "yellow"
border.width: 3
color: "transparent"
height: 20
width: ListView.view.width
y: view.currentItem.y // highlighting direct binding to selected item!
z: Infinity
}
}
}