2

在我的项目中,我想通过 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 时发出。

任何建议如何解决该问题?

谢谢

4

3 回答 3

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));
于 2015-05-25T16:24:26.813 回答
0

对于部分验证:

oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                 + "\\." + oIpRange
                 + "(\\." + oIpRange + ")?"
                 + "(\\." + oIpRange + ")?$");
于 2015-05-25T20:16:22.563 回答
0

感谢您的回答我对正则表达式添加了一个小修复

QString oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                         + "(\\." + oIpRange + ")?"
                         + "(\\." + oIpRange + ")?"
                         + "(\\." + oIpRange + ")?$");
于 2015-05-26T06:59:45.140 回答