如果连接以有的数据库,比如要调用其他包里的数据库,例如这个数据库的路径为C:/user/db,名字叫做datebase1.db,数据库用户名为shw,密码为123456,那么就在main函数里添加如下代码
db.setDatabaseName("C:/user/db/datebase1.db");
db.setUserName("shw"); //设置数据库用户名
db.setPassword("123456");
db.open();
这样的话,就可以在登录界面的cpp文件里和注册界面的cpp文件里调用这个数据库了,你也可以下载一个sqlite数据库,连接数据库看一下数据库中的内容。
登陆界面的话,我是写了一个判断行数的代码
//判断行数
int queryRowCount(QSqlQuery query)
{
int initialPos = query.at();
// Very strange but for no records .at() returns -2
int pos = 0;
if (query.last()){
pos = query.at() + 1;
}else{
pos = 0;
}
// Important to restore initial pos
query.seek(initialPos);
return pos;
}
然后再给命令(提前说明:这里的表的名字是users,表中有两列,一列是用户名user,一列是密码pwd,这都是数据库中以有的是其他包中的,这个函数只是调用):
void MainWindow::on_login_clicked()
{
QString username = ui->userEidt->text();
QString password = ui->passwordsEidt->text();
if(username == "")
QMessageBox::warning(this,"","用户名不能为空!");
else if(password == "")
QMessageBox::warning(this,"","密码不能为空!");
else
{
//sql语句在数据库中进行查询验证
QString S =QString("select * from users where user ='%1'and pwd = '%2' ")
.arg(username).arg(password);
QSqlQuery query;
query.exec(S);
int row = queryRowCount(query);
if(row == 1)
{
MyTcpClient *mytcpclient = new MyTcpClient;
mytcpclient->username = username;
mytcpclient->show();
this->close();
}
else
QMessageBox::warning(NULL,"Error","用户名或密码错误!!!");
}
}
注册界面的话也很好实现,把查找的命令改为插入即可
void Form::on_pushButton_clicked()
{
QString namestr = ui->username->text();
QString num = ui->pwdname->text();
if(namestr == ""||num == ""){
QMessageBox::warning(NULL,"no","用户名和密码不能为空");
}
else{
QString str = QString("insert into users values('%1', '%2')")
.arg(namestr).arg(num);
QSqlQuery query;
query.exec(str);
QMessageBox::warning(NULL,"good","注册成功");
MainWindow *win = new MainWindow;
win->show();
this->close();
}
}
打开sqlite数据库,就可以看这个数据库中的数据了