用于QLineEdit的Qt inputMask和QValidator(Hex验证)

时间:2011-10-20 15:02:56

标签: regex qt

我有一个QLineEdit,用户可以使用键盘输入。 行编辑必须只接受十六进制字符。 行编辑必须自动在每组2个十六进制字符之间放置分隔符 当用户删除最后一个十六进制字符时,应自动删除最后一个分隔符。

我试过这个:     UI-> mTextEdit-> setInputMask( “HH,11H,11H,11H,11H”);

但不幸的是,当没有文字时会显示所有逗号,你必须提前知道你想要多少组十六进制数(我不知道/不能限制)。

我可以使用QValidator为我做这个吗?

1 个答案:

答案 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}}