【问题标题】:How to restrict the expression in QLineEdit如何限制 QLineEdit 中的表达式
【发布时间】:2014-03-25 06:37:21
【问题描述】:

我需要一个必须代表一个范围的 QLineEdit。 F.E. (1,2] ,对于这个表示,我想为用户设置一个验证检查器,不要写其他符号。 在这种情况下,我有 char + int + char + int + char,如下例所示。 Qt 有什么功能可以处理这个问题吗? 提前致谢。

【问题讨论】:

  • 在我看来,一个不允许您键入某些字符的输入字段是一个可怕的想法(接近于在矩形内捕获鼠标移动)。请注意,许多用户不看键盘就无法打字,因此他们会输入禁止的字符,然后他们会惊讶于他们不存在,再次重新输入整个内容(仍然不看屏幕)。如果内容无效,最好在字段附近显示一条消息。

标签: regex qt validation qlineedit


【解决方案1】:

您可以使用 Qt 的Input Validator 功能来实现这个目标。

以下 sn-p 将按照您指定的方式限制行编辑中的输入。

QRegExp re("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$");
QRegExpValidator *validator = new QRegExpValidator(re, this);
ui->lineEdit->setValidator(validator);

编辑 更新了正则表达式

【讨论】:

  • 在这种情况下我可以写 00000,2222,但你不能允许写多于一个前导 0。右边是 "^[[,(]{1,1}(0|[ 1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9 })[],)]{1,1}$"
  • 你以后需要delete验证者吗?
  • @TomášZato 它没有显示在 sn-p 中,但是“this”参数正在设置 *parent 参数,当父对象是 QObject 时,这将启用自动资源清理(参见stackoverflow.com/a/3902325/798377
【解决方案2】:
QRegExp expr("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$");

这就是我想要的!我必须允许多个前导 0-s。

【讨论】:

    【解决方案3】:

    编写一个只接受有效范围的正则表达式是不可能的,原因是你可以检查语法但不能检查数值(除非正则表达式引擎有一些扩展)。区别

    [1234,5678)
    

    [5678,1234)
    

    不在于语法(正则表达式的含义),而在于语义(正则表达式没有那么强大)。

    仅用于检查正则表达式的语法

    \[\d+,\d+\)
    

    或者,如果您还允许其他类型的区间边界条件:

    [\[)]\d+,\d+[\])]
    

    【讨论】:

    • 我不想接受一个有效的范围,我想接受一个有效的语法。这意味着 char int char int char
    【解决方案4】:

    我建议不要允许所有字符,而只允许需要的字符。示例:

    QRegExp("[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]");
    

    我会解释:

    [] 这些包含您的 char 的匹配字符: \\ (这实际上与 \ 符号匹配,因为您需要为正则表达式 \ 转义一次,而 Qt String 再次转义为 \\), \ ( 用于左括号等。您可以添加所有想要匹配的字符。一个很好的帮助是正则表达式备忘单。

    \d 匹配一个数字,如果你想有多个数字,你可以使用 \d+ 至少一个或 \d{3} 正好3个数字。 (+ 1 或更多,? 0 或 1,* 0 或更多)

    另一个例子是:

    QRegExp("[\\\\\\(\\)\\{\\}]\\d[,\\.]\\d[\\\\\\(\\)\\{\\}]");
    

    让中心字符成为 .或 , 符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 2014-10-14
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2014-08-04
      • 2021-09-12
      相关资源
      最近更新 更多