#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