QML ItemDelegate 突出显示 属性 无效
QML ItemDelegate highlighted property not work
我想在 ItemDelegate
中自定义突出显示颜色。如果我使用默认 ItemDelegate
和 Material 主题,那么当我将鼠标悬停在这个项目上时一切正常并且颜色会改变,但是当我重新定义背景时它会崩溃并且颜色不再改变。
MyItemDelegate.qml:
import QtQuick 2.11
import QtQuick.Controls.Material 2.4
import QtQuick.Controls 2.4
import QtQuick.Templates 2.4 as T
T.ItemDelegate {
id: myItemDelegate
height: 40
anchors.left: parent.left
anchors.right: parent.right
contentItem: Text {
text: "Hello"
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
background: Rectangle {
anchors.fill: myItemDelegate
color: myItemDelegate.highlighted ? "blue" : "transparent"
}
}
为什么highlighted
属性不行?我如何自定义这种颜色?
问题很简单,高亮的属性不是从头创建的,必须激活,最常见的是和ListView.isCurrentItem
有绑定,所以必须更新currentItem
:
MyItemDelegate.qml
import QtQuick 2.11
import QtQuick.Controls.Material 2.4
import QtQuick.Controls 2.4
import QtQuick.Templates 2.4 as T
T.ItemDelegate {
id: myItemDelegate
height: 40
anchors.left: parent.left
anchors.right: parent.right
highlighted: ListView.isCurrentItem // <---
contentItem: Text {
text: "Hello"
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
background: Rectangle {
anchors.fill: myItemDelegate
color: myItemDelegate.highlighted ? "blue" : "transparent"
}
}
main.qml
import QtQuick 2.9
import QtQuick.Controls 2.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Scroll")
ListView {
id: listView
anchors.fill: parent
model: 20
delegate: MyItemDelegate {
MouseArea{
anchors.fill: parent
hoverEnabled: true
onHoveredChanged: listView.currentIndex = index
}
}
}
}
我想在 ItemDelegate
中自定义突出显示颜色。如果我使用默认 ItemDelegate
和 Material 主题,那么当我将鼠标悬停在这个项目上时一切正常并且颜色会改变,但是当我重新定义背景时它会崩溃并且颜色不再改变。
MyItemDelegate.qml:
import QtQuick 2.11
import QtQuick.Controls.Material 2.4
import QtQuick.Controls 2.4
import QtQuick.Templates 2.4 as T
T.ItemDelegate {
id: myItemDelegate
height: 40
anchors.left: parent.left
anchors.right: parent.right
contentItem: Text {
text: "Hello"
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
background: Rectangle {
anchors.fill: myItemDelegate
color: myItemDelegate.highlighted ? "blue" : "transparent"
}
}
为什么highlighted
属性不行?我如何自定义这种颜色?
问题很简单,高亮的属性不是从头创建的,必须激活,最常见的是和ListView.isCurrentItem
有绑定,所以必须更新currentItem
:
MyItemDelegate.qml
import QtQuick 2.11
import QtQuick.Controls.Material 2.4
import QtQuick.Controls 2.4
import QtQuick.Templates 2.4 as T
T.ItemDelegate {
id: myItemDelegate
height: 40
anchors.left: parent.left
anchors.right: parent.right
highlighted: ListView.isCurrentItem // <---
contentItem: Text {
text: "Hello"
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
background: Rectangle {
anchors.fill: myItemDelegate
color: myItemDelegate.highlighted ? "blue" : "transparent"
}
}
main.qml
import QtQuick 2.9
import QtQuick.Controls 2.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Scroll")
ListView {
id: listView
anchors.fill: parent
model: 20
delegate: MyItemDelegate {
MouseArea{
anchors.fill: parent
hoverEnabled: true
onHoveredChanged: listView.currentIndex = index
}
}
}
}