QML TableView rowDelegate styleData.row 未定义
QML TableView rowDelegate styleData.row not defined
我正在尝试为 TableView
创建自定义行委托。根据 Documentation,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
(只要你使用这个精确的组件作为行委托就不会忘记)。
例如,如果您单击每个表视图行,您应该会在控制台日志中看到正确的行号:
qml: [!] log: 0
qml: [!] log: 1
qml: [!] log: 2
qml: [!] log: 3
我正在尝试为 TableView
创建自定义行委托。根据 Documentation,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
(只要你使用这个精确的组件作为行委托就不会忘记)。
例如,如果您单击每个表视图行,您应该会在控制台日志中看到正确的行号:
qml: [!] log: 0
qml: [!] log: 1
qml: [!] log: 2
qml: [!] log: 3