在 Qt 6 中,所有 QtQuick 1 组件都被删除。我想使用 Qt 6 重写一个旧应用程序。该应用程序使用 TableView 控件版本 1。
如何在新控件 TableView 中选择一行并获取该行中所有单元格的值?
我有同样的问题。这对我有用。
我使用Qt 5.12和QtQuick 2.12。TableView
我在获取点击行的索引时遇到了麻烦。我发现DelegateChooser和DelegateChoice组件允许您访问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
允许您为模型创建多个委托。如果您只有一个代表(如上面的示例),我不确定使用选择器是否是一种好习惯。但是这种解决方法非常有效。
您还可以将 ItemDelegate 用于委托,使用 scopedmodel.display
访问模型数据(itemDelegate 具有继承的显示属性)。您还必须显式处理当前选定的行,以及那些到项目,在一个简单的情况下,这应该工作
property int selectedRow: 1
delegate: ItemDelegate {
highlighted: row == view.selectedRow
onClicked: view.selectedRow = row
text: model.display
}