82 lines
2.1 KiB
QML
82 lines
2.1 KiB
QML
|
|
import QtQuick
|
|||
|
|
import QtQuick.Controls
|
|||
|
|
//import QtQuick.VirtualKeyboard 2.15
|
|||
|
|
|
|||
|
|
TextField {
|
|||
|
|
id: control
|
|||
|
|
placeholderText:qsTr("XX XX XX")
|
|||
|
|
// font.pointSize: 13
|
|||
|
|
font.family: "微软雅黑"
|
|||
|
|
placeholderTextColor: "#A5A5A5"
|
|||
|
|
color: "#1D2129"
|
|||
|
|
focus: true
|
|||
|
|
selectByMouse: true
|
|||
|
|
// validator: RegExpValidator { // 使用正则表达式验证器
|
|||
|
|
// regExp: /[0-9A-F]+/ // 只能输入0~9的整数和A~F的大写字母
|
|||
|
|
// }
|
|||
|
|
background: Rectangle {
|
|||
|
|
implicitWidth: 330
|
|||
|
|
implicitHeight: 30
|
|||
|
|
color: "#F2F3F5"
|
|||
|
|
border.color: "#0068B4"
|
|||
|
|
}
|
|||
|
|
property bool isDelete: false
|
|||
|
|
property bool isBack: false
|
|||
|
|
property bool isPaste: false
|
|||
|
|
// maximumLength: 29//200
|
|||
|
|
Keys.onPressed: {
|
|||
|
|
isBack = (event.key === Qt.Key_Backspace)
|
|||
|
|
isDelete = (event.key === Qt.Key_Delete)
|
|||
|
|
isPaste = (event.modifiers === Qt.ControlModifier && event.key === Qt.Key_V)
|
|||
|
|
event.accepted = (event.text===" ") //过滤键盘输入空格
|
|||
|
|
}
|
|||
|
|
onTextChanged: {
|
|||
|
|
|
|||
|
|
if(isPaste){
|
|||
|
|
control.text = checkFormat(control.text)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
let temp = control.text
|
|||
|
|
if(!isBack&&!isDelete){
|
|||
|
|
|
|||
|
|
var position = cursorPosition
|
|||
|
|
|
|||
|
|
if(length === 2)
|
|||
|
|
{
|
|||
|
|
temp += " "
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if(length > 3 && (length - 2) % 3 === 0){
|
|||
|
|
temp += " "
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
position += 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp = checkFormat(temp)
|
|||
|
|
control.text = temp
|
|||
|
|
select(position,position)
|
|||
|
|
}
|
|||
|
|
isBack = false
|
|||
|
|
isDelete = false
|
|||
|
|
isPaste = false
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function checkFormat(text){
|
|||
|
|
text = text.replace(/[^0-9a-f]/gi, '');
|
|||
|
|
let upertext = text.toUpperCase();
|
|||
|
|
let newText = upertext.split(" ").join("")
|
|||
|
|
var index = 0
|
|||
|
|
while(index < newText.length){
|
|||
|
|
if((index+1) %3 === 0){
|
|||
|
|
newText = newText.slice(0, index) + " " + newText.slice(index)
|
|||
|
|
index++
|
|||
|
|
}
|
|||
|
|
index++
|
|||
|
|
}
|
|||
|
|
return newText
|
|||
|
|
}
|
|||
|
|
}
|