2

在 Qt 6 中,所有 QtQuick 1 组件都被删除。我想使用 Qt 6 重写一个旧应用程序。该应用程序使用 TableView 控件版本 1。

如何在新控件 TableView 中选择一行并获取该行中所有单元格的值?

4

2 回答 2

3

我有同样的问题。这对我有用。

我使用Qt 5.12QtQuick 2.12TableView

我在获取点击行的索引时遇到了麻烦。我发现DelegateChooserDelegateChoice组件允许您访问TableView. 获得形式后,您可以使用它通过index(...)data(...)方法DelegateChoice访问模型中的数据,例如:QAbstractItemModel

var idx = model.index(row, column)
var data = model.data(idx)

这是完整的示例:

    import QtQuick 2.12             // TableView
    import Qt.labs.qmlmodels 1.0    // DelegateChooser
    
    // ...
    
    TableView {  
      id: usersTable
      model: tableModel
      
      anchors.fill: parent
      
      delegate: DelegateChooser
      {
        DelegateChoice
        {
          delegate: Rectangle {
            implicitWidth: 100
            implicitHeight: 50
            Text { text: display }
            
            MouseArea {
              anchors.fill: parent
              onClicked:
              {            
                // print value from clicked cell
                var idx = tableModel.index(row,column)
                console.log("Clicked cell: ", tableModel.data(idx))
                
                // print values from all cells in a row
                console.log("Clicked row: ")
                for (var i = 0; i < tableModel.columnCount(); i++)
                {
                  var idx2 = tableModel.index(row,i)
                  var data = tableModel.data(idx2)
                  console.log(data)
                }
              } // onClicked
            } // MouseArea
          } // Rectangle
        }// DelegateChoice
      } // DelegateChooser
    } // TableView

DelegateChooser允许您为模型创建多个委托。如果您只有一个代表(如上面的示例),我不确定使用选择器是否是一种好习惯。但是这种解决方法非常有效。

于 2021-01-26T09:30:28.397 回答
1

您还可以将 ItemDelegate 用于委托,使用 scopedmodel.display访问模型数据(itemDelegate 具有继承的显示属性)。您还必须显式处理当前选定的行,以及那些到项目,在一个简单的情况下,这应该工作

    property int selectedRow: 1

    delegate: ItemDelegate {
        highlighted: row == view.selectedRow
        onClicked: view.selectedRow = row
        text: model.display
    }
于 2021-08-18T11:37:10.053 回答