委托警告中的Treeview模型属性为null

时间:2015-07-07 15:32:33

标签: c++ qt qml qtquick2

我有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:无法读取属性&#39; CommandIcon&#39; null qrc:/DraggableRectangle.qml:20:TypeError:无法读取属性&#39; CommandTitle&#39; of null *

它有什么问题?

2 个答案:

答案 0 :(得分:1)

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

E.g。如果在关闭应用程序时模型在视图之前被销毁,则视图仍会尝试在短时间内(在它被销毁之前)使用被破坏的对象。

试试这个:

text: model ? model.CommandTitle : ""

答案 1 :(得分:0)

它是代表根目录中的锚点。

anchors.horizontalCenter: parent.horizontalCenter.

您无法锚定TreeView代表的左侧。删除该行,我敢打赌它会起作用。