TableView не отображает данные при обновлении строки - PullRequest
0 голосов
/ 09 января 2019

Когда я впервые устанавливаю столбец TableView и List Model. отображается нормально

Но когда я изменяю номер столбца, удаляя все столбцы и добавляя столбец, я также обновляю свою модель списка. TableView становится пустым Он просто показывает 2 столбца, которые я добавляю, и не показывает данные.

Я использую Qt 5.7 и использую TableView в QtQuick.Controls 1.4. Вот мой код:

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 голосов
/ 09 января 2019

Видимо, вам нужно установить временное отсоединение модели от 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
}

Кредиты roigallego для решения с forum.qt.io .

...