c++qtqtguiqtcoreqlineedit

How to set Input Mask and QValidator to a QLineEdit at a time in Qt?


I want a line edit which accepts an ip address. If I give input mask as:

ui->lineEdit->setInputMask("000.000.000.000");

It is accepting values greater than 255. If I give a validator then we have to give a dot(.) after every three digits. What would the best way to handle it?


Solution

  • It is accepting value greater than 255.

    Absolutely, because '0' means this:

    character of the Number category permitted but not required.

    As you can see, this is not your cup of tea. There are at least the following ways to circumvent it:

    The regex solution would be probably the quick, but also ugliest IMHO:

    QString ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
    // You may want to use QRegularExpression for new code with Qt 5 (not mandatory).
    QRegExp ipRegex ("^" + ipRange
                     + "\\." + ipRange
                     + "\\." + ipRange
                     + "\\." + ipRange + "$");
    QRegExpValidator *ipValidator = new QRegExpValidator(ipRegex, this);
    lineEdit->setValidator(ipValidator);
    

    Disclaimer: this will only validate IP4 addresses properly, so it will not work for IP6 should you need that in the future.