以下是代码:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Window 2.1
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
Window {
id: window
/* Interface */
Rectangle {
id: dataView
anchors.topMargin: 10
height: 30 * model.count
width: 600
radius: 5
border.color: "#333"
border.width: 1
color: "black"
opacity: 0.6
clip: true
ListView {
anchors.fill: parent
anchors.topMargin: 7
model: model
delegate: delegate
interactive: false
spacing: 6
highlight: Rectangle {
color: "#333"
border.width: 1
border.color: "red"
}
onHighlightItemChanged: {
console.debug(1);
}
}
}
/* Model */
ListModel {
id: model
ListElement {
name: "Google Chrome"
icon: ""
}
ListElement {
name: "Google Chrome"
icon: ""
}
ListElement {
name: "Google Chrome"
icon: ""
}
}
Component {
id: delegate
Rectangle {
id: wrapper
height: 24
anchors.topMargin: 7
anchors.bottomMargin: 7
Row {
anchors.fill: parent
spacing: 0
Image {
id: delegateIcon
fillMode: Image.Stretch
source: icon
width: 24
height: 24
}
Text {
text: name
font.pixelSize: 12
font.family: "Segoe UI"
color: "#fff"
}
}
}
}
}
问题在标题中描述:当我用鼠标悬停项目时,没有任何反应。此外,onHighlightItemChanged仅在应用程序开始时发出。
我做错了什么?
答案 0 :(得分:2)
1)您需要向代理
添加width
id: wrapper
height: 24
变为
id: wrapper
height: 24
width: parent.width // or 100
2)您需要通过添加此
来触发“click - > item changed”操作MouseArea {
anchors.fill: parent
z: 1
onClicked:
{
list.currentIndex = index
}
}
代理人Row { }
下的
注意:onHighlightItemChanged:
没有按照您的想法进行操作(它会检查委托组件是否已更改,就像您有2个可能的委托一样)。这样更好:
onCurrentIndexChanged: {
console.debug("New index : "+ currentIndex);
}