QML中的警告:在单独的文件中委派并访问模型项属性

时间:2017-06-19 10:13:50

标签: qt qml

以下代码可以正常显示我的项目,但是我收到了警告

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
    }
}

// ...

1 个答案:

答案 0 :(得分:2)

您使用TableDelegate作为突出显示。那是错的。

ListView创建1个高亮项目实例,它将被绘制为当前所选项目的背景。当当前项目更改时,它还可以在项目之间移动。它应该只是一个矩形或任何你想要使用的。

在您的示例中,突出显示项是一个完整的委托,它想要访问模型数据,但它不能访问。