как установить маску ввода только для выбранного элемента в Qt или qml

#qt #qml #tableview

Вопрос:

Требования

У меня есть представление таблицы, которое реализовано с использованием 2 столбцов tableview, первый столбец содержит число, 2-й столбец-текстовое поле.

Теперь я должен убедиться, что текстовое поле может принимать входные данные только на основе цифр, указанных в первом столбце.

Например, если в первом столбце указано 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}  }
    }
}
 

В настоящее время моя маска ввода применяется ко всем ячейкам столбца, как мне убедиться, что она применяется только к выбранному элементу?

Ответ №1:

Я получил ответ, через делегата я могу получить доступ к свойству styleData.hasActiveFocus, следовательно, я могу сделать что-то вроде

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

Это сработало, с помощью этого я могу установить маску для каждого отдельного элемента в столбце

Комментарии:

1. Вы можете отметить свой собственный ответ как принятый. В любом случае, вы не должны использовать TableView QuickControl 1, потому что он устарел. Вместо этого используйте QuickControl 2