QLineEdit 输入掩码和插入的空白

问题描述 投票:0回答:3

我有一个

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

这在QT5中可能吗?

qt qlineedit
3个回答
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
投票

请注意,输入掩码不会在返回的文本中insert空格(即

QLineEdit::text()
方法的返回值),尽管在GUI中插入空格是为了提高可读性。

为了更清楚地说明,输入掩码使

QLineEdit
overwrite 模式而不是 insert 模式下工作。但设置
QValidator
会使
QLineEdit
insert 模式下工作不变。

例如,如果您输入

"AA3"
,GUI 会显示
"AA  3"
,但
text()
方法返回
AA3
。如果您现在将光标移回第三个位置并输入
"B"
,GUI 将显示
"AAB 3"
(不是
"AAB  3"
,因为我们处于 overwite 模式)并且
text()
方法返回
"AAB3"


0
投票

对于任何感兴趣的人,

QRegExpValidator
在Qt6中已被弃用,但有一个新的
QRegularExpressionValidator
,所以@Reimundo的示例将是这样的:

QRegularExpression rgx("[a-zA-Z]{4}\\d{1,2}");
QValidator *comValidator = new QRegularExpressionValidator(rgx, this);
comLineEdit->setValidator(comValidator);
© www.soinside.com 2019 - 2024. All rights reserved.