QRegExp RegExp("^((25[0-5])|(2[0-4]\\d)|(1\\d\\d)|([1-9]\\d)|\\d)");
QStringList StringSplit = StringLine.split(".");
int count =0;
bool Adopt=true;
auto StringInterator = StringSplit.begin();
int CursorPosition = ui->lineEdit->cursorPosition();
while(StringInterator != StringSplit.end())
{
count++;
if(!RegExp.exactMatch(*StringInterator++))
{
Adopt = false;
continue;
}
}
if(Adopt&&(4==count))
{
QString StrtoInt;
QString *TmpString;
for(int i=0;i<4;i++)
{
TmpString = new QString(StringSplit.at(i));
StrtoInt+=QString::number(TmpString->toInt(&Adopt,10));
delete TmpString;
StrtoInt+=i<3?".":"";
}
ui->lineEdit->setText(StrtoInt);
m_ipString = StrtoInt;
}
else
{
CursorPosition--;
ui->lineEdit->setText(m_ipString);
}
ui->lineEdit->setCursorPosition(CursorPosition);
基本思想:
记录光标位置
把原有字符串以 "." 拆分
利用正则表达式对拆分后字符串对比
如果4个字符串都是true
把拆分后的字符串转换为数字[去零]
每个字符串后面都加上 "."
记录下当前正确IP
输出IP
否则
光标位置前移一位
输出正确的IP
调正光标至原来位置