![](/img/trans.png)
[英]TableView - How to get hovered row without loosing styleData.selected
[英]QML TableView rowDelegate styleData.row not defined
我正在尝试为TableView
创建自定义行委托。 根据文档 , rowDelegate
应该有权访问名为styleData.row
的属性。 但是,当我尝试访问此属性时,它是未定义的。 我使用调试器检查styleData
,并且该row
丢失了:
我的代码很简单:
TableView {
width: 500//DEBUG
height: 300//DEBUG
model: ListModel {
ListElement {
lectureName: "Baum1"
}
ListElement {
lectureName: "Baum2"
}
ListElement {
lectureName: "Baum3"
}
ListElement {
lectureName: "Baum4"
}
}
rowDelegate: HeaderRowDelegate {//simply a Rectangle with an in property called "modelRow"
id: rowDelegate
modelRow: {
var data = styleData;
return data.row;
}
}
TableViewColumn {
id: c1
role: "lectureName"
title: "TEST"
}
}
您不必自己进行分配:由于HeaderRowDelegate
组件已分配给TableView
的rowDelegate
属性,因此您的组件已经可以访问styleData.row
属性。
这是一个例子:
main.qml
import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls 1.3
ApplicationWindow {
id: app
title: qsTr("Test")
width: 800
height: 600
TableView {
width: 500//DEBUG
height: 300//DEBUG
model: ListModel {
ListElement {
lectureName: "Baum1"
}
ListElement {
lectureName: "Baum2"
}
ListElement {
lectureName: "Baum3"
}
ListElement {
lectureName: "Baum4"
}
}
rowDelegate: RowDel {}
TableViewColumn {
id: c1
role: "lectureName"
title: "TEST"
}
}
}
现在行委托RowDel.qml
import QtQuick 2.4
Rectangle {
id: rowDel
color: "blue"
height: 60
readonly property int modelRow: styleData.row ? styleData.row : 0
MouseArea {
anchors.fill: parent
onClicked: {
console.log("[!] log: " + modelRow);
}
}
}
这里重要的是,您可以直接从组件中引用styleData.row
( styleData.row
,只要您将此精确的组件用作行委托即可)。
例如,如果单击每个tableview行,您应该看到控制台日志中显示的正确行号:
qml: [!] log: 0
qml: [!] log: 1
qml: [!] log: 2
qml: [!] log: 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.