如何在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": ""
这有效,我可以为列中的每个单独元素设置掩码
要求
我有一个 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": ""
这有效,我可以为列中的每个单独元素设置掩码