TableView在更新行时不显示数据

时间:2019-01-09 09:52:40

标签: qt qml qt5

当我第一次设置TableView列和List Model时。它显示正常

但是当我通过删除所有列并添加列来更改列号时,也会更新列表模型。 TableView变为空 它只会显示我添加的第二列,而不会显示数据。

我正在使用Qt 5.7和QtQuick.Controls 1.4中的TableView 这是我的代码:

TableView {
    id: tbl
    width: 400
    height: 300
    model: lst
}

Component {
    id: columnComponent
    TableViewColumn {
        width: 50
    }
}

ListModel {
    id: lst
}

Button {
    text: "Click me"
    anchors.top: tbl.bottom

    onClicked: {
        for(var i = tbl.columnCount-1; i>=0; i--) {
            tbl.removeColumn(i)
        }
        tbl.addColumn(columnComponent.createObject(tbl,{ role: "1"}))
        tbl.addColumn(columnComponent.createObject(tbl,{ role: "2"}))
        tbl.addColumn(columnComponent.createObject(tbl,{ role: "3"}))

        lst.clear()
        var element = {}
        element["1"] = "a"
        element["2"] = "a"
        element["3"] = "a"
        lst.append(element)

        tbl.model = lst
    }
}

Button {
    text: "Click me 2"
    anchors.left: tbl.right

    onClicked: {
        for(var i = tbl.columnCount-1; i>=0; i--) {
            tbl.removeColumn(0)
        }
        tbl.addColumn(columnComponent.createObject(tbl,{ role: "a"}))
        tbl.addColumn(columnComponent.createObject(tbl,{ role: "b"}))

        lst.clear()
        var element = {}
        element["a"] = "b"
        element["b"] = "b"
        lst.append(element)

        tbl.model = lst
    }
}

1 个答案:

答案 0 :(得分:0)

显然,您需要设置从TableView暂时分离模型。在您的每个onClicked插槽中添加一行:

onClicked: {
    tbl.model = undefined    // add this line, temporarily detach tbl.model

    for(var i = tbl.columnCount-1; i>=0; i--) {
        tbl.removeColumn(i)
    }

    // ... 
    // code omitted for brevity 
    // ...

    tbl.model = lst   //  reset the model
}

Credits to roigallego for the solution from forum.qt.io