简介
一个比较简单的登录界面,包括界面布局,功能实现,由于账户密码是保存在本地数据库中,还包括数据库的连接、查询等操作。
效果图如下:
1、准备工作:
数据库创建
我这里提前创建了个stock数据库,并创建了个userpassword表存储用户、密码和用户类型(cutomerType=0表示管理员,1表示普通用户)。
连接数据库
qt6不默认下载mysql的驱动,可以去网上查找下载方法。我这里提前创建了个stock数据库,并创建了个userpassword表存储用户、密码和用户类型。连接数据库代码如下:
需要先在.h文件声明一个数据库
private:
QSqlDatabase db;
.cpp文件
db = QSqlDatabase::addDatabase("QMYSQL");//加载mysql数据库驱动,
db.setDatabaseName("stock");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("123456");
if(!db.open())
{
QMessageBox::information(this,"数据库","打开失败");
}
2、登录界面设置
ui界面的设置
布局直接在ui里面设置的,ui里面的命名我用红色字写在上面
界面的其他设置:
setWindowTitle("登录");
setWindowIcon(QIcon(":/windowicon.png"));
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
//设置窗口固定大小
setFixedSize(293,176);
//设置输入密码控件为密文
ui->lineEdit_password->setEchoMode(QLineEdit::Password);
//限制输入密码长度
ui->lineEdit_uesername->setMaxLength(6);
ui->lineEdit_password->setMaxLength(6);
//初始用户权限
ui->comboBox_permision->addItem("管理员",1);
ui->comboBox_permision->addItem("普通用户",2);
由于设置了一个是否记住密码的选项,所以在这里我给了lineEdit一个初始化的操作
//登录界面初始化
void MainWidget::loginInit()
{
//打开存放登录信息的ini文件
QSettings setting(CONFIGPATH, QSettings::IniFormat);
//上次登录成功是否选择了记住密码
bool isremember = setting.value("login/isremember").toBool();
if(isremember)
{
QString name = setting.value("login/userName").toString();
QString psw = setting.value("login/password").toString();
int customerType = setting.value("login/customerType").toInt();
ui->lineEdit_uesername->setText(name);
ui->lineEdit_password->setText(psw);
ui->checkBox->setChecked(true);
ui->comboBox_permision->setCurrentIndex(customerType);
}
}
这里的CONFIGPATH是一个用来保存上次成功登录信息的.ini文件,后面会讲。loginInit()写好之后,直接放在构造函数的最后调用一下就行。
3、一些按钮功能的实现
退出按钮的槽函数:
void MainWidget::on_pushButton_exit_clicked()
{
this->close();
}
.ini文件
这里有一个.ini文件,我是用来保存上一次登录成功后用户输入的账户密码,以便下一次打开能够显示在窗口上。
这里得先创建一个.ini文件,保存的位置是在这里
设置一个宏定义
//上一次登录成功并选择了记住密码的文件位置
#define CONFIGPATH (QCoreApplication::applicationDirPath() + "/config/config.ini")
登录按钮的槽函数:
void MainWidget::on_pushButton_login_clicked()
{
//获取输入的用户名和密码
QString userName = ui->lineEdit_uesername->text();//用户名
QString passWord = ui->lineEdit_password->text();//密码
int customerType = ui->comboBox_permision->currentIndex();//用户类型
if (userName == "" || password == "")
{
QMessageBox::information(this,"登录失败","用户名或密码不能为空");
return;
}
//定义一个sql模型
QSqlQueryModel *model = new QSqlQueryModel;
//sql语句,因为username是主键,不会有相同的username,所以直接查询username就可以
QString sqlName;
//找出表中userpassword(项名)中等于给定值的数据
sqlName = "SELECT * FROM userpassword WHERE userName = '"+userName+"'";
//执行sql语句
model->setQuery(sqlName);
//检查用户是否存在
QModelIndex index1 = model->index(0,0);
QModelIndex index2 = model->index(0,1);
QModelIndex index3 = model->index(0,2);
if(index1.data()==0 || index2.data()!=passWord || index3.data()!=customerType)
{
QMessageBox::information(this,"登录失败","用户名或密码错误");
}
//登录成功,只有登录成功时才改变.ini文件
else if(index1.data()!=0 && index2.data()==passWord && index3.data()==customerType)
{
//是否选中了记住密码
bool isremember = ui->checkBox->isChecked();
//打开存放登录信息的ini文件
QSettings setting(CONFIGPATH, QSettings::IniFormat);
//如果选中则将用户密码放置文件记录
if(isremember)
{
//是否记住密码改为true(此处记录的是上次登录时是否选择了记住密码)
setting.setValue("login/isremember", "true");
setting.setValue("login/userName", userName);
setting.setValue("login/password", passWord);
setting.setValue("login/customerType", customerType);
}
else
{
setting.setValue("login/isremember", "false");
}
//登录成功后显示用户使用界面
if(customerType==0)//管理员打开使用界面
{
ManagerWidget *man = new ManagerWidget;
this->hide();
man->show();
}
}
}
这下登录界面的所有工作就做好啦,后续的界面美化等到项目后期再做,先把功能都实现先