【发布时间】:2021-08-27 11:07:11
【问题描述】:
我有一个简单的示例项目here 来演示问题。
我在下面包含了我认为是相关来源的内容,但其余部分可以在上面的项目链接中找到,或者我可以编辑并在有用的情况下添加更多内容。
我正在查看 TableView 文档here。我没有看到任何关于如何支持行选择的提及。如果我查看here,我会看到 5.15 的文档,其中描述了行选择。而且,如果我查看 here,我会看到一些有关 Qt Quick Controls 1 行选择的文档,但这也不适用于我的情况。
对于 Qt 5.12 和 Qt Quick Controls 2,我无法找到相应的文档。
对于我的案例,如何支持 TableView 中的行选择?如何找到适合我情况的正确文档?
main.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import Backend 1.0
ApplicationWindow
{
id: root
visible: true
width: 768
height: 450
minimumWidth: 768
minimumHeight: 450
property string backendReference: Backend.objectName
TableView
{
id: tableView
columnWidthProvider: function( column )
{
return 100;
}
rowHeightProvider: function( column )
{
return 23;
}
anchors.fill: parent
topMargin: columnsHeader.implicitHeight
model: Backend.modelResults.list
ScrollBar.horizontal: ScrollBar {}
ScrollBar.vertical: ScrollBar {}
clip: true
delegate: Rectangle
{
Text
{
text: display
anchors.fill: parent
anchors.margins: 10
color: 'black'
font.pixelSize: 15
verticalAlignment: Text.AlignVCenter
}
}
Rectangle // mask the headers
{
z: 3
color: "#222222"
y: tableView.contentY
x: tableView.contentX
width: tableView.leftMargin
height: tableView.topMargin
}
Row
{
id: columnsHeader
y: tableView.contentY
z: 2
Repeater
{
model: tableView.columns > 0 ? tableView.columns : 1
Label
{
width: tableView.columnWidthProvider(modelData)
height: 35
text: Backend.modelResults.list.headerData( modelData, Qt.Horizontal )
font.pixelSize: 15
padding: 10
verticalAlignment: Text.AlignVCenter
background: Rectangle
{
color: "#eeeeee"
}
}
}
}
ScrollIndicator.horizontal: ScrollIndicator { }
ScrollIndicator.vertical: ScrollIndicator { }
}
}
【问题讨论】:
-
由于性能原因,我相信 QtQuick 2 中的 TableView 与 QtQuick.Controls 1 中的 TableView 相比是完全重写的。根据您的问题以及提供的文档,我没有看到任何表明 TableView 2 实际上包含此功能的内容(相反,您可以自己实现它)。除了它出现在 TableView 1 API 中之外,您还有理由相信这一点吗?
-
如何自己实现?是否有任何示例代码可以演示如何执行此操作?我已经看过了,但找不到任何东西。
-
“选择”是一个任意概念,因此如何选择某项内容取决于您。一个简单的例子:在你的模型条目中添加一个“selected”标志,然后通过交互来切换它——每个委托都可以包含一个 MouseArea,当单击它时,它将执行类似
model.selected = !model.selected的操作。当然,您需要为更复杂的选择生成任何进一步的逻辑。相关问题:stackoverflow.com/questions/65733392/…stackoverflow.com/questions/62633171/… -
看来我还需要了解角色如何工作并以某种方式使用 Qt::DecorationRole 来指示该行已被选中。但是,它们的工作方式也让我难以理解(stackoverflow.com/questions/67895259/…)。我只需要支持一次选择一行。
标签: qt qml qtquick2 qtquickcontrols2