我有一个QLineEdit
与InputMask
设置为">AAAA90"
,也就是说,我希望文本正好由4个大写Ascii字母和1-2个数字组成。但是,如果用户键入“AA1”,则QLineEdit
将显示AA 1
,即它将插入两个空白并在第5个位置打印允许的“1”。我宁愿在任何位置都想要使用非法字符的行为,即如果用户键入“AA%”,则光标停留在第三个位置并且不打印“%”字符。QLineEdit InputMask和空白插入
这是可能的QT5?
我有一个QLineEdit
与InputMask
设置为">AAAA90"
,也就是说,我希望文本正好由4个大写Ascii字母和1-2个数字组成。但是,如果用户键入“AA1”,则QLineEdit
将显示AA 1
,即它将插入两个空白并在第5个位置打印允许的“1”。我宁愿在任何位置都想要使用非法字符的行为,即如果用户键入“AA%”,则光标停留在第三个位置并且不打印“%”字符。QLineEdit InputMask和空白插入
这是可能的QT5?
感谢@Mike对QValidator尖,我结束了挂钩一个验证像
QRegExp rgx("[a-zA-Z]{4}\\d{1,2}");
QValidator *comValidator = new QRegExpValidator (rgx, this);
comLineEdit->setValidator(comValidator);
并与挂钩textEdited
:
void MainWindow::comTextEdited(const QString &arg1)
{
qobject_cast<QLineEdit*>(sender())->setText(arg1.toUpper());
}
到了第4个字符强制为大写。
请注意,虽然在GUI中插入了空格以提高可读性,但输入掩码不会在返回的文本中插入空格(即返回值为QLineEdit::text()
方法)。
为了更明确,输入掩码使QLineEdit
S能够工作覆盖模式不插入模式。但设置QValidator
离开QLineEdit
工作在插入模式不变。
例如,如果您键入"AA3"
,GUI显示"AA 3"
,但text()
方法返回AA3
。如果现在将光标移回第3位并键入"B"
,则GUI将显示"AAB 3"
(不是"AAB 3"
,因为我们在覆盖模式)和text()
方法返回"AAB3"
。
那么,前四个字母是否允许空格? – Mike
这绝对有可能,请看['QValidator'](https://doc.qt.io/qt-5/qvalidator.html)。 – Mike