我有一个QLineEdit,用户可以使用键盘输入。 行编辑必须只接受十六进制字符。 行编辑必须自动在每组2个十六进制字符之间放置分隔符 当用户删除最后一个十六进制字符时,应自动删除最后一个分隔符。
我试过这个: UI-> mTextEdit-> setInputMask( “HH,11H,11H,11H,11H”);
但不幸的是,当没有文字时会显示所有逗号,你必须提前知道你想要多少组十六进制数(我不知道/不能限制)。
我可以使用QValidator为我做这个吗?
答案 0 :(得分:4)
您可以使用QValidator
的自定义子类,validate()
例如QValidator::State HexValidator::validate(QString &input, int &pos) const
{
// remove trailing comma
if (input.endsWith(',')) {
input.chop(1);
}
// insert comma when third hex in a row was entered
QRegExp rxThreeHexAtTheEnd("(?:[0-9a-fA-F]{2},)*[0-9a-fA-F]{3}");
if (rxThreeHexAtTheEnd.exactMatch(input)) {
input.insert(input.length()-1, ',');
pos = input.length();
}
// match against needed regexp
QRegExp rx("(?:[0-9a-fA-F]{2},)*[0-9a-fA-F]{0,2}");
if (rx.exactMatch(input)) {
return QValidator::Acceptable;
}
return QValidator::Invalid;
}
。像这样:
{{1}}