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
可以解决您的问题。

太好了!谢谢!!很乐意帮忙!对于未来的问题,请尝试将整个代码作为一个最小、完整且可验证的示例提供: