QLineEdit IP部分验证

时间:2015-05-25 15:48:34

标签: qt ip qlineedit qregexp

在我的项目中,我想通过IP输入过滤一些数据。

我还想允许通过部分IP输入进行过滤 例如:192.168。

我发现了如何设置完整的IP验证。

  QString oIpRange;
    QRegExpValidator *poIpValidator;

    // Client IP validation mask
    oIpRange =
            "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
    QRegExp oIpRegex ("^" + oIpRange
                     + "\\." + oIpRange
                     + "\\." + oIpRange
                     + "\\." + oIpRange + "$");
    poIpValidator =
            new QRegExpValidator(oIpRegex,
                                 poQtLineEdit);

    // Client IP set validator
    poQtLineEdit->setValidator( poIpValidator );

我将QLineEdit“returnPressed”信号连接到我的过滤器功能。

问题是“returnPressed”信号仅在我输入完整的IP而不是部分IP时发出。

有任何建议如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:3)

您可以使用QRegExpValidator来执行此操作。

// #include <QRegExpValidator>
QString oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
              + "\\." + oIpRange
              + "\\." + oIpRange
              + "\\." + oIpRange + "$");
ed->setValidator(new QRegExpValidator(oIpRegex));

答案 1 :(得分:0)

部分验证:

oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                 + "\\." + oIpRange
                 + "(\\." + oIpRange + ")?"
                 + "(\\." + oIpRange + ")?$");

答案 2 :(得分:0)

感谢您的回答我为正则表达式添加了一个小修补程序

QString oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                         + "(\\." + oIpRange + ")?"
                         + "(\\." + oIpRange + ")?"
                         + "(\\." + oIpRange + ")?$");