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