Treeview 模型属性在委托警告中为空

Treeview model properties are null in delegate warning

我有一个TreeView

TreeView {
        id: dndView
        rowDelegate: Item {
            height: 30
        }
        itemDelegate:  dndDelegate
        model: myModel
        TableViewColumn {
            title: "Name"
            resizable: true
        }
}

及其 工作的代表

Rectangle {
    id: dragRect
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.verticalCenter: parent.verticalCenter
    color: 'gray'
    width: dndView.width - 20
    height: 30
    Image {
        id: menuItemImage
        anchors.verticalCenter:parent.verticalCenter
        source:model.CommandIcon
    }
    Text {
        anchors.left:menuItemImage.right
        anchors.verticalCenter:parent.verticalCenter
        text:model.CommandTitle
        font.pixelSize: 14
    }

C++ 文件中的角色:

QHash<int, QByteArray> MenuTreeModel::roleNames() const {
    QHash<int, QByteArray> roles;
    roles[TitleRole] = "CommandTitle";
    roles[IconRole] = "CommandIcon";
    return roles;
}

它可以正确显示文本和图标,但是当我展开项目或关闭应用程序时我收到警告:

qrc:/DraggableRectangle.qml:15: TypeError: Cannot read property 'CommandIcon' of null qrc:/DraggableRectangle.qml:20: TypeError: Cannot read property 'CommandTitle' of null*

怎么了?

它是您委托根目录中的锚点。

anchors.horizontalCenter: parent.horizontalCenter.

您不能锚定 TreeView 委托的左侧。删除该行,我敢打赌它会起作用。

如果警告仅出现在特定事件上,则可能意味着当您的 QML 视图尝试使用模型时模型已被破坏或尚未创建。

例如如果在关闭应用程序时模型在视图之前被销毁,视图仍会尝试在短时间内使用已销毁的对象(在它也被销毁之前)。

试试这个:

text: model ? model.CommandTitle : ""