在TableView

时间:2016-03-07 20:53:06

标签: qt qml qtquick2

我正在使用自定义委托创建一个TableView,以便在列中添加checkbox,并且我在以下方面取得了一些成功:

// TableViewCheckBoxColumn.qml
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

TableViewColumn {
    title: ""
    role: "check"
    delegate: CheckBox {
        id: checkBox
    }
}

表的实现如下:

import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Item {
    anchors.centerIn: parent

    ListModel {
        id: testModel
        ListElement {
            check1: true
            check2: true
            check3: false
            check4: false
            check5: false
        }
    }

    TableView {
        anchors.centerIn: parent
        TableViewCheckBoxColumn {
            id: checkedColumn1
        }

        TableViewCheckBoxColumn {
            id: checkedColumn2
        }

        TableViewCheckBoxColumn {
            id: checkedColumn3
        }

        TableViewCheckBoxColumn {
            id: checkedColumn4
        }

        TableViewCheckBoxColumn {
            id: checkedColumn5
        }
        model: testModel
    }
}

这至少会创建TableView,其中包含5列,其中每列都有checkbox个es。但是,我无法弄清楚如何将列的已检查状态从testModel传播到TableView

1 个答案:

答案 0 :(得分:0)

首先,您需要将列的role属性与模型的属性进行匹配。然后,您可以使用属性'styleData访问该属性的值。值'

ListModel {
    id: testModel

    ListElement {
        check1: true
        check2: true
        check3: false
        check4: false
        check5: false
    }
}


TableView {
    width: 1000; height: 500

    anchors.centerIn: parent
    TableViewColumn {
        role: "check1"

        delegate: CheckBox {
            checked: styleData.value
        }
    }

    TableViewColumn {
        role: "check2"

        delegate: CheckBox {
            checked: styleData.value
        }
    }

    TableViewColumn {
        role: "check3"

        delegate: CheckBox {
            checked: styleData.value
        }
    }

    TableViewColumn {
        role: "check4"

        delegate: CheckBox {
            checked: styleData.value
        }
    }

    TableViewColumn {
        role: "check5"

        delegate: CheckBox {
            checked: styleData.value
        }
    }

    model: testModel
}

这样更好:

TableView {
    width: 1000; height: 500

    anchors.centerIn: parent
    TableViewColumn {
        role: "check1"
    }

    TableViewColumn {
        role: "check2"
    }

    TableViewColumn {
        role: "check3"
    }

    TableViewColumn {
        role: "check4"
    }

    TableViewColumn {
        role: "check5"
    }

    model: testModel

    itemDelegate: CheckBox {
        checked: styleData.value
    }
}