3

QLineEdit入力バリデーターを有効な IP アドレスに制限するように設定するにはどうすればよいでしょうか? iexxxx ここで、x は 0 から 255 の間である必要があり、x を空にすることはできません

4

2 に答える 2

4

QRegExpQValidatorを探しています。IPv4を検証するには、次の式を使用します。

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\b

例:

QRegExp ipREX("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\b");
ipREX.setCaseSensitivity(Qt::CaseInsensitive);
ipREX.setPatternSyntax(QRegExp::RegExp);

次に、テキスト行編集のバリデーターとして使用します。

QRegExpValidator regValidator( rx, 0 );
ui->lineEdit->setValidator( &regValidator );

ここで、入力を読み取るだけで、バリデーターがそれを検証します =)。手動で行いたい場合は、次のようにしてください。

ui->lineEdit->setText( "000.000.000.000" );
const QString input = ui->lineEdit->text();
// To check if the text is valid:
qDebug() << "IP validation: " << myREX.exactMatch(input);

Qt クラス、QHostAddressおよびQAbstractSocketを使用して作成する別の方法があります。

QHostAddress address(input);
if (QAbstractSocket::IPv4Protocol == address.protocol())
{
   qDebug("Valid IPv4 address.");
}
else if (QAbstractSocket::IPv6Protocol == address.protocol())
{
   qDebug("Valid IPv6 address.");
}
else
{
   qDebug("Unknown or invalid address.");
}
于 2016-08-29T10:03:02.990 に答える