Delegates QML独特的TableViewColumn委托
我有一个Delegates QML独特的TableViewColumn委托,delegates,qml,tableview,qtquickcontrols2,Delegates,Qml,Tableview,Qtquickcontrols2,我有一个TableView对象,它由四个TableViewColumn对象组成 TableViewColumn对象的两个委托是ComboBox 我希望第二个代理根据用户在第一个代理中的选择更改其模型。我已经做到了 但是,这会导致在表的所有其他行中更改第二个代理的模型。我希望此更改仅应用于相应的行,以便能够在每行中有不同的模型 这可能发生吗?如果是,怎么做 TableViewColumn{ id: usageCol title: "Type"
TableView
对象,它由四个TableViewColumn
对象组成
TableViewColumn
对象的两个委托是ComboBox
我希望第二个代理根据用户在第一个代理中的选择更改其模型。我已经做到了
但是,这会导致在表的所有其他行中更改第二个代理的模型。我希望此更改仅应用于相应的行,以便能够在每行中有不同的模型
这可能发生吗?如果是,怎么做
TableViewColumn{
id: usageCol
title: "Type"
property string modelName: "Power Out"
delegate: ComboBox {
id: usageCombo
model:
ListModel{
id: usageModel
ListElement { text: "PowerOut" }
ListElement { text: "AnalogOut" }
ListElement { text: "PwmOut" }
ListElement { text: "DigitalOut" }
ListElement { text: "BldcOut" }
ListElement { text: "AnalogIn" }
ListElement { text: "PwmIn" }
ListElement { text: "DigitalIn" }
ListElement { text: "Can" }
}
currentIndex: 0
height: 16
anchors.fill: parent
onCurrentTextChanged: {
tableModel.setProperty(styleData.row,"use",currentText);
usageCol.modelName = currentText;
}
}
width: tableConfig.width/tableConfig.columnCount
}
TableViewColumn{
id: pinCol
title: "PIN"
property string modelName: usageCol.modelName
delegate: ComboBox {
id: pinCombo
model: {if (pinCol.modelName === "PowerOut") { modelPowerOut;}
else if (pinCol.modelName === "AnalogOut") { modelAnalogOut;}
else if (pinCol.modelName === "AnalogIn") { modelAnalogIn;}
else if (pinCol.modelName === "PwmOut") { modelPwmOut; }
else if (pinCol.modelName === "DigitalOut" || pinCol.modelName === "BldcOut" || pinCol.modelName === "DigitalIn") { modelDigitalBldc; }
else if (pinCol.modelName === "PwmIn") { modelPwmIn; }
else if (pinCol.modelName === "Can") { modelCan; }
}
/* Try Loader for delegate changing the model as needed. */
height: 16
anchors.fill: parent
onCurrentTextChanged: {
tableModel.setProperty(styleData.row,"pin",currentText);
}
}
width: tableConfig.width/tableConfig.columnCount
}
[已解决]
TableViewColumn{
id: pinCol
title: "PIN"
delegate: ComboBox {
id: pinCombo
model:
{
switch(tableModel.get(styleData.row).use){
case "PowerOut": return modelPowerOut
case "AnalogOut": return modelAnalogOut
case "AnalogIn": return modelAnalogIn
case "PwmOut": return modelPwmOut
case "DigitalOut" || "BldcOut" || "DigitalIn": return modelDigitalBldc
case "PwmIn": return modelPwmIn
case "Can": return modelCan
}
}
height: 16
anchors.fill: parent
onCurrentTextChanged: {
tableModel.setProperty(styleData.row,"pin",currentText);
}
}
width: tableConfig.width/tableConfig.columnCount
}
不能使用
modelName
,因为它是整个列的公共属性。您应该依赖主表视图中的模型(对应于一行)
删除所有modelName
属性并使用tableModel.get(styleData.row)。使用而不是pinCol.modelName
可以解决您的问题。太好了!谢谢!!很乐意帮忙!对于未来的问题,请尝试将整个代码作为一个最小、完整且可验证的示例提供: