QML 独特的 TableViewColumn 委托

QML Distinctive TableViewColumn Delegate

我有一个 TableView 对象,它由四个 TableViewColumn 对象组成。

两个 TableViewColumn 对象的代表是 ComboBox

我希望第二个委托根据用户在第一个委托中的选择更改其模型。我做到了。

但是,这会导致 table 的所有其他行中第二个代表的模型发生变化。我希望此更改仅应用于相应的行,以便能够在每一行中使用不同的模型。

这可能发生吗?如果是这样,怎么办?

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,因为它是整个列的通用 属性。您应该依赖主要 TableView 中的模型(对应于一行)。

删除所有 modelName 属性并使用 tableModel.get(styleData.row).use 而不是 pinCol.modelName 应该可以解决您的问题。