如何在Qt或qml中只为选中的项目设置输入掩码

how to set the input mask only for the selected item in Qt or qml

要求

我有一个 table 视图,它是使用 2 个 table 视图列实现的,第一列包含一个数字,第二列是一个文本字段。

现在我必须确保 TextField 只能根据第一列中提到的数字进行输入。

例如,如果第一列显示为 3,那么在第二列中我必须确保只能输入 3 个字符。

尝试过

我能够适当地创建模型,但是当我应用输入掩码时,它会应用于列中的所有单元格。

如何确保它仅应用于所选元素:

import QtQuick 2.12
import QtQuick.Window 2.12
import Qt.labs.qmlmodels 1.0
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Table View Example")

    TableView {
        id:peopleTable
        anchors.fill: parent
        clip: true
        model: peopleModel
        property string maskvalue: ""
        onClicked: {
            maskvalue = peopleModel.getpreviouscolumnData(currentIndex)  //this returns the maskvalue from the model side
        }

        TableViewColumn {
            id: firstColumn
            title: "number"
            property var something: delegate.item
            role: "one";
            width: 70;
            delegate: firstColumnComponent
        }

        Component{
            id:firstColumnComponent
            Item {
                id: toplevelItem
                TextEdit{
                    text: styleData.value
                }
            }
        }

        TableViewColumn {title: "settextfield"; role: "two"; width: 70; delegate: secondColumnComponent}

        Component{
            id:secondColumnComponent
            Item {
                id: secondColumnparent
                TextField{
                    text: styleData.value
                    inputMask : maskvalue
                    }
                }
            }
        }

        TableViewColumn {title: "Gender"; role: "three"; width: 70; delegate: TextEdit { text: styleData.value}  }
        TableViewColumn {title: "Age"; role: "four"; width: 70; delegate: TextEdit { text: styleData.value}  }
        TableViewColumn {title: "Phone Number"; role: "five"; width: 100; delegate: TextEdit { text: styleData.value}  }
    }
}

目前我的 inputmask 已应用于列中的所有单元格,如何确保它仅应用于所选项目?

我得到了答案,通过委托我可以访问 styleData.hasActiveFocus 属性 因此我可以做一些事情

inputMask : styleData.selected ?  "999": ""

这有效,我可以为列中的每个单独元素设置掩码