我有一个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
}
答案 0 :(得分:0)
您不能使用modelName
,因为它是整个列的公共属性。您应该依赖主TableView
中的模型(对应于一行)。
删除所有modelName
属性并使用tableModel.get(styleData.row).use
代替pinCol.modelName
可以解决您的问题。