2016-04-06 2 views
1

У меня есть TableView. Третий столбец под названием «OrderedAmount» содержит спинбокс.QML Извлечь значение спинбокса, используемого в ячейке TableView

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;

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

ответ

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()) 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

Спасибо большое, это работает pefectly – vsbalint

+0

Рад помочь, и добро пожаловать Переполнение стека. Если этот ответ решит вашу проблему, отметьте его как принятый. – Tarod

Смежные вопросы