/实现功能:Qt下 LineEdit控件输入两个字符自动生成一个空格,并且输入的字符在"0123456789ABCDEFabcdef "之内
//第一个发送LineEdit的槽函数
void MainWindow::on_lineEdit_textChanged(const QString &arg1)//常引用是防止数据在局部函数内被随意的篡改
{
//遍历数组如果有字符字符在0 - 10 和 A - F 之外就输入无效
//输入不到两个字符就返回
QString HexBuff = "0123456789ABCDEFabcdef ";
int flag = 0;
for(int j = 0; j < HexBuff.length(); j++){
if(arg1[arg1.length()-1] == HexBuff[j])
flag = 1;//遍历输入的字符是否在HexBuff里面的范围内
}
if(flag){//如果在就可以输入
flag = 0;
if(arg1.length() < 2)
{
QString on_lineEdit_textChanged_to2 = arg1.toUpper();
ui->lineEdit->setText(on_lineEdit_textChanged_to2);
return;
}
QString on_lineEdit_textChanged_Temp = arg1.toUpper();//先将读到的字符转换为大写
//去掉字符中所有的空格
string on_lineEdit_textChanged_Temp_String = on_lineEdit_textChanged_Temp.toStdString();
string::iterator it;
for (it = on_lineEdit_textChanged_Temp_String.begin(); it < on_lineEdit_textChanged_Temp_String.end(); it++)
{
if (*it == ' ')
{
on_lineEdit_textChanged_Temp_String.erase(it);
it--;
/*
it--很重要,因为使用erase()删除it指向的字符后,后面的字符就移了过来,
it指向的位置就被后一个字符填充了,而for语句最后的it++,又使it向后移
了一个位置,所以就忽略掉了填充过来的这个字符。在这加上it--后就和for
语句的it++抵消了,使迭代器能够访问所有的字符。
*/
}
}
on_lineEdit_textChanged_Temp = QString::fromStdString(on_lineEdit_textChanged_Temp_String);
//每隔两个字符就插入一个空格
int mo = (on_lineEdit_textChanged_Temp.length()/2);
int yu = (on_lineEdit_textChanged_Temp.length()%2);
if(yu){
for(int i = 1; i <= mo; i++){
on_lineEdit_textChanged_Temp.insert(((2*i)+(i-1))," ");
}
}
else
{ //将当前的值输入的值的最后一个转为
QString Buff_Temp = arg1.toUpper();
ui->lineEdit->setText(Buff_Temp);
return;
}
ui->lineEdit->setText(on_lineEdit_textChanged_Temp);
}else{
QString Delete_End_QString = arg1.left(arg1.length()-1);//shan删除最后一个字符//不再我的QString内的字符
ui->lineEdit->setText(Delete_End_QString);
}
}