目录
先来看看最终的效果图:
第一步创建数据库:
可以直接用他在带的,也可以自己创建,双击的开
可以用mysqly语句进行创建或者在图形化界面创建,创建一个表用来存密码和用户名
可以用QT自带的ui来设计登录界面和注册界面(比代码创建快的多),如果想让ui看起来更好看些可以用css代码来对UI进行美化,项目用到素材和完整代码有需要的写在评论区我会发给你的,例如:
数据库的链接与绑定:
db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));
// 数据库连接需要设置的信息
db->setHostName("127.0.0.1"); // 数据库服务器IP
db->setDatabaseName("******");// 数据库名
db->setUserName("root");// 用户名
db->setPassword("*******");// 密码
db->setPort(3306);// 端口号
// 连接数据库
bool ok = db->open();
if (ok)
{
qDebug() << "数据库打开成功";
}
else
{
qDebug() << "数据库打开失败";
}
sql_query = new QSqlQuery(*db);
登录按钮的实现
//做检测,如果密码错误则弹窗口
QString userName = ui->username->currentText();
QString password = ui->passwd->text().trimmed();
if(userName.isEmpty())
{
QMessageBox::about(this, "注意!", "用户名不能为空");
return;
}
else if(password.isEmpty())
{
QMessageBox::about(this, "注意!", "用户密码不能为空");
return;
}
else
{
//数据库中查询是否输入正确
QString sql= QString("SELECT *from login where username='%1';").arg(userName);//检查用户是否存在
if(sql_query->exec(sql))//用户不为空
{
if(sql_query->next())
{
QString pwd_str = password;
QByteArray pwd = pwd_str.toUtf8();
QByteArray result = QCryptographicHash::hash(pwd, QCryptographicHash::Md5);
password= QString(result.toHex());
if(password == sql_query->value("password").toString()) // 密码相等
{
//画面切换
this->hide();
my_label->show();
}
else
{
QMessageBox::about(this, "注意", "输入密码错误!");
}
}
else
{
QMessageBox::about(this, "注意", "用户不存在!");
}
}
}
注册按钮:
qDebug()<<"点击了注册按钮";
//做检测,如果密码错误则弹窗口
QString userName = ui->LineEdit_us->text().trimmed();
QString password = ui->lineEdit_ans->text().trimmed();
QString password2 = ui->lineEdit_ans2->text().trimmed();
QSqlQuery query2;
QString sql2= QString("SELECT username from login where username='%1';").arg(userName);//检查用户是否存在
if(query2.exec(sql2))
{
qDebug()<<"sql执行成功";
}
if(userName==nullptr)
{
QMessageBox::about(this, "注意", "用户名不能为空");
}
else if(password==nullptr||password2==nullptr)
{
QMessageBox::about(this, "注意", "密码不能为空");
}
else if(password!=password2)
{
QMessageBox::about(this, "注意", "两次密码不一致");
}
else{
if(query2.next())
{
QMessageBox::about(this, "注意", "用户已经存在");
}
else
{
//qDebug()<<"开始插入";
QString pwd_str =password;
QByteArray pwd = pwd_str.toUtf8();
QByteArray result = QCryptographicHash::hash(pwd, QCryptographicHash::Md5);
password=QString(result.toHex());
QString c=QString("insert into login value('%1','%2')").arg(password).arg(userName);
if(query2.exec(c))
{
qDebug()<<"开始插入";
QMessageBox::about(this, "注意", "注册成功恭喜成为何耳林qqDemo用户");
ui->LineEdit_us->clear();
ui->lineEdit_ans->clear();
ui->lineEdit_ans2->clear();
QThread::msleep(50);
emit this->mysignupBack();
}
}
}
密码加密:
!!!注意!!!,你在注册时对密码进行了MD5加密在登录时你也要进行相同的操作后再对密码进行验证,否则登录会出错(原因就不用多解释了吧)
QString pwd_str =password;
QByteArray pwd = pwd_str.toUtf8();
QByteArray result = QCryptographicHash::hash(pwd, QCryptographicHash::Md5);
password=QString(result.toHex());
QString c=QString("insert into login value('%1','%2')").arg(password).arg(userName);