我在使用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);
这是检查输入字段所需的全部内容吗?
答案 0 :(得分: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
所有这些示例都专门用于QRegEx
与QRegExValidator
一起使用行编辑:
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());
希望有所帮助。
答案 1 :(得分:0)
您的模式匹配(例如)此字符串
a\Sa
在名称之间必须有文字\和大写S. 我尝试使用非常方便的示例regexp,您可以在QtCreator发布的标准示例中找到它(Ctrl + 1,然后在搜索字段中输入regexp ...)