以下代码可以正常显示我的项目,但是我收到了警告
qrc:/TableDelegate.qml:24: ReferenceError: name is not defined
我认为这是因为ListView在它为空时尝试访问模型,并且无法引用项属性。我认为我没有正确地做到这一点,但我不知道如何做得更好。
所以我的问题是:如何通过正确的方式摆脱警告?
TableDelegate.qml:
import QtQuick 2.0
import QtQuick.Layouts 1.1
Item {
property color bgcolor: 'transparent'
property alias box: rowBox
height: 40
width: parent.width
Rectangle {
id: rowBox
anchors.fill: parent
color: bgcolor
RowLayout {
anchors.fill: parent
Rectangle {
id: tableNameColumn
color: 'transparent'
Layout.fillHeight: true
Layout.fillWidth: true
Text {
anchors.centerIn: parent
color: textcolor
text: name // <--- here is `name`
}
}
// More Columns ...
}
}
MouseArea {
anchors.fill: parent
onClicked: {
view.currentIndex = index
}
}
}
我像这样使用它
TableView.qml:
// ...
ListModel {
id: model
}
ListView {
id: view
model: model
anchors.fill: parent
highlight: delegate_highlighted
highlightFollowsCurrentItem: true
delegate: delegate
}
Component {
id: delegate
TableDelegate {
bgcolor: 'transparent';
}
}
Component {
id: delegate_highlighted
TableDelegate {
bgcolor: 'lightsteelblue'
box.border.color: 'black'
box.radius: 3
}
}
// ...
答案 0 :(得分:2)
您使用TableDelegate
作为突出显示。那是错的。
ListView创建1个高亮项目实例,它将被绘制为当前所选项目的背景。当当前项目更改时,它还可以在项目之间移动。它应该只是一个矩形或任何你想要使用的。
在您的示例中,突出显示项是一个完整的委托,它想要访问模型数据,但它不能访问。