我也遇到了同样的问题。这对我有用。
我使用 Qt 5.12 和 QtQuick 2.12 中的 TableView。
我在获取点击行的索引时遇到了麻烦。我发现DelegateChooser 和DelegateChoice 组件允许您访问TableView 中的行和列属性。在您获得 row 和 column 表单 DelegateChoice 后,您可以使用它通过 QAbstractItemModel 方法 index(...) 和 data(...) 访问模型中的数据,例如:
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 允许您为模型创建多个委托。如果您只有一个代表(如上面的示例),我不确定使用选择器是否是一种好习惯。但这种解决方法非常有效。