重点:
1.通常在存储密码的时候需要对数据进行加密,通常采用Md5进行加密。
//存储密码时候
//读取存储的用户名和密码, 密码是经过加密的
void TDialogLogin::readSettings()
{QSettings settings; //创建QSettings对象bool saved=settings.value("saved",false).toBool(); //读取 saved键的值m_user=settings.value("Username", "user").toString(); //读取 Username 键的值,默 认为“user”QString defaultPSWD=encrypt("12345"); //默认密码"12345"加密后的数据m_pswd=settings.value("PSWD",defaultPSWD).toString(); //读取PSWD 键的值if (saved)ui->editUser->setText(m_user);ui->chkBoxSave->setChecked(saved);
}//保存用户名,密码等设置
void TDialogLogin::writeSettings()
{QSettings settings; //注册表键组settings.setValue("Username",m_user); //用户名settings.setValue("PSWD",m_pswd); //密码,经过加密的settings.setValue("saved",ui->chkBoxSave->isChecked());
}QString TDialogLogin::encrypt(const QString &str)
{ //字符串MD5算法加密QByteArray btArray= str.toLocal8Bit(); //字符串转换为字节数组数据QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密算法hash.addData(btArray); //添加数据到加密哈希值QByteArray resultArray =hash.result(); //返回最终的哈希值QString md5 =resultArray.toHex(); //转换为16进制字符串return md5;
}//判断用户输入账号和密码
//"确定"按钮响应
void TDialogLogin::on_btnOK_clicked()
{QString user=ui->editUser->text().trimmed(); //输入的用户名QString pswd=ui->editPSWD->text().trimmed(); //输入的密码QString encrptPSWD=encrypt(pswd); //对输入的密码进行加密if ((user==m_user)&&(encrptPSWD==m_pswd)) //如果用户名和密码正确{writeSettings(); //保存设置this->accept(); //accept(),关闭对话框}else{m_tryCount++; //错误次数if (m_tryCount>3){QMessageBox::critical(this, "错误", "输入错误次数太多,强行退出");this->reject(); //reject(), 关闭对话框}elseQMessageBox::warning(this, "错误提示", "用户名或密码错误");}
}