QML Получить значение счетчика, используемого в ячейке TableView

У меня есть табличное представление. 3-й столбец под названием «OrderedAmount» содержит счетчик.

TableView {
        id: lw_order
        x: 420
        y: 63
        width: 169
        height: 253
        model: orderModelId

        TableViewColumn
        {
            id: tableorderid
            role: "OrderedID"
            title: "ID"
            width: 10
        }
        TableViewColumn
        {
            role: "OrderedItems"
            title: "Items"
            width: 100
        }
        TableViewColumn
        {
            id: tableamountid
            role: "OrderedAmount"
            title: "Amount"
            width: 50
            delegate: Item {
                        SpinBox {
                            id: tableamountspin
                            anchors.verticalCenter: parent.verticalCenter
                            minimumValue: 1
                            width: 40
                        }
            }
        }




        ListModel {
            id: orderModelId
        }

    }

Как я могу получить фактическое значение SpinBox из каждой строки таблицы?

Я пробовал это:

for (var index = 0 ; index < lw_order.rowCount; index++)
            {
                order = order + orderModelId.get(index).OrderedID + ";" + orderModelId.get(index).OrderedAmount + ";"
            }

К сожалению, я получаю только значение первого столбца с именем «OrderedID».

qml: 1;undefined;4;undefined;

Большое спасибо за Вашу помощь


person vsbalint    schedule 06.04.2016    source источник


Ответы (1)


Я думаю, проблема в том, что вам нужно установить значение SpinBox как styleData.value, которое является значением для элемента OrderedAmount.

Если вы это сделаете, вы можете получить правильное значение в своей функции, используя:

orderModelId.get(index).OrderedAmount

Помните, что вам нужно будет обновить модель при изменении SpinBox. Что-то вроде этого:

orderModelId.setProperty(styleData.row, "OrderedAmount", value.toString())

С учетом этих идей код мог бы получиться примерно таким:

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 300

    Button {
        text: "click me"

        function getValues(lw_order, orderModelId) {
            for (var index = 0 ; index < lw_order.rowCount; index++)
            {
                print("row: " + index)
                print("  OrderedID: " + orderModelId.get(index).OrderedID + "; " +
                      " OrderedItems: " + orderModelId.get(index).OrderedItems + "; " +
                      " OrderedAmount: " + orderModelId.get(index).OrderedAmount)
            }
        }

        onClicked: {
            getValues(lw_order, orderModelId)
        }
    }

    ListModel {
        id: orderModelId
        ListElement {
            OrderedID: "1"
            OrderedItems: "10"
            OrderedAmount: "15"
        }

        ListElement {
            OrderedID: "2"
            OrderedItems: "20"
            OrderedAmount: "25"
        }

        ListElement {
            OrderedID: "3"
            OrderedItems: "30"
            OrderedAmount: "35"
        }
    }

    TableView {
        id: lw_order
        x: 0
        y: 50
        width: 300
        height: 300
        model: orderModelId

        TableViewColumn
        {
            id: tableorderid
            role: "OrderedID"
            title: "ID"
            width: 50
        }
        TableViewColumn
        {
            role: "OrderedItems"
            title: "Items"
            width: 100
        }
        TableViewColumn
        {
            id: tableamountid
            role: "OrderedAmount"
            title: "Amount"
            width: 70
            delegate: Item {
                SpinBox {
                    id: tableamountspin
                    anchors.verticalCenter: parent.verticalCenter
                    minimumValue: 1
                    width: 70
                    value: styleData.value

                    onValueChanged: {
                        if (focus == true) {
                            console.log("onValueChanged - row: "  + styleData.row + " column: " + styleData.column + " value: " + value)
                            orderModelId.setProperty(styleData.row, "OrderedAmount", value.toString())
                        }
                    }
                }
            }
        }
    }
}
person Tarod    schedule 07.04.2016
comment
Рад помочь и добро пожаловать в Stack Overflow. Если этот ответ решил вашу проблему, отметьте его как принятый. - person Tarod; 09.04.2016