2016-10-02 141 views
0

我有一个QLineEditInputMask设置为">AAAA90",也就是说,我希望文本正好由4个大写Ascii字母和1-2个数字组成。但是,如果用户键入“AA1”,则QLineEdit将显示AA 1,即它将插入两个空白并在第5个位置打印允许的“1”。我宁愿在任何位置都想要使用非法字符的行为,即如果用户键入“AA%”,则光标停留在第三个位置并且不打印“%”字符。QLineEdit InputMask和空白插入

这是可能的QT5?

+0

那么,前四个字母是否允许空格? – Mike

+1

这绝对有可能,请看['QValidator'](https://doc.qt.io/qt-5/qvalidator.html)。 – Mike

回答

1

感谢@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个字符强制为大写。

0

请注意,虽然在GUI中插入了空格以提高可读性,但输入掩码不会在返回的文本中插入空格(即返回值为QLineEdit::text()方法)。

为了更明确,输入掩码使QLineEdit S能够工作覆盖模式不插入模式。但设置QValidator离开QLineEdit工作在插入模式不变。

例如,如果您键入"AA3",GUI显示"AA 3",但text()方法返回AA3。如果现在将光标移回第3位并键入"B",则GUI将显示"AAB 3"(不是"AAB 3",因为我们在覆盖模式)和text()方法返回"AAB3"