0

我在使用 QRegExValidator 验证 QLineEdit 时遇到问题。它应该只接受名字和姓氏之间有空格。我几乎按照这里的例子:

http://doc.qt.digia.com/4.6/qregexpvalidator.html

代码编译,我可以运行程序,但我不能在 lineedit 字段中输入任何字母。为什么?

QString name_rx = "[A-z]+\\S[A-z]+";
QRegExp rx;
QValidator *validator =  new QRegExpValidator(rx, this); // this means mainwindow

rx.setPattern(name_rx);
ui->nameEdit->setValidator(validator);
ui->nameEdit->setMaxLength(32);

这就是检查输入字段所需的全部内容吗?

4

2 回答 2

2

两个小问题...

QString name_rx = "([A-Z]|[a-z])+\\s([A-Z]|[a-z])+";// Note, \\s not \\S
QRegExp rx;
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator

另一种可接受的方法是:

QString name_rx = "[a-z]+\\s[a-z]";// Note, \\s not \\S
QRegExp rx;
rx.setCaseSensitivity(Qt::CaseInsensitive);
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator

在这里它被添加到验证器

QValidator *validator =  new QRegExpValidator(rx, this); // this means mainwindow

ui->nameEdit->setValidator(validator);
ui->nameEdit->setMaxLength(32);

也是一个很好的例子,看看这个页面:

http://doc.qt.digia.com/4.6/tools-settingseditor-variantdelegate-cpp.html

它具有所有这些示例,专门用于QRegExQRegExValidator行编辑一起使用:

 boolExp.setPattern("true|false");
 boolExp.setCaseSensitivity(Qt::CaseInsensitive);

 byteArrayExp.setPattern("[\\x00-\\xff]*");
 charExp.setPattern(".");
 colorExp.setPattern("\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)");
 doubleExp.setPattern("");
 pointExp.setPattern("\\((-?[0-9]*),(-?[0-9]*)\\)");
 rectExp.setPattern("\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)");
 signedIntegerExp.setPattern("-?[0-9]*");
 sizeExp = pointExp;
 unsignedIntegerExp.setPattern("[0-9]*");

 dateExp.setPattern("([0-9]{,4})-([0-9]{,2})-([0-9]{,2})");
 timeExp.setPattern("([0-9]{,2}):([0-9]{,2}):([0-9]{,2})");
 dateTimeExp.setPattern(dateExp.pattern() + "T" + timeExp.pattern());

希望有帮助。

于 2013-10-11T17:14:29.683 回答
0

你的模式匹配(例如)这个字符串

a\Sa

也就是说,名称之间必须有一个文字 \ 和一个大写的 S。我尝试使用非常方便的示例正则表达式,您可以在 QtCreator 发布的标准示例中找到它(Ctrl+1,然后在搜索字段中输入正则表达式...)

在此处输入图像描述

于 2013-10-11T17:46:17.733 回答