您的位置:首页 > 编程语言 > Qt开发

qt学习 (五) 登陆界面之连接按钮

2014-08-19 12:56 387 查看
登陆步骤是比对输入的账号密码与数据库中的表项目是否一致

一样,跳出mainwidget对话框

不一样,跳出消息错误框

今天就是要进去,

因为进去以后是widget的窗口,所以把用来核对消息的数据库放在MAINwidget。cpp中,

再拿一个用户点击连接的子类login.cpp,就在这里面画用户登录账号密码textEdit

1除了textEdit基本都是button慢慢加。登录界面可以学的东西很多。





2在widget。h文件中加入数据库所需要的头文件,

#include<QtSql/QSqlDatabase>

#include<QtSql/QSqlQuery>

#include<QtSql/QSqlError>

数据库有基本的驱动Qsqlite

有比较好的使用数据库的模式,就是把数据库基本创建放在一个文件中,查改增删都去调用这个就行了。


使用数据库的基本命令
QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");//建数据库

db.setDatabaseName("mayplestory.db");//命名数据库为may..



数据库初始化:

query.exec(QObject::tr("createtablemayplestory(idintprimarykey,namevarchar(20),passwordvarchar(20));"));

插入数据:

query.exec(QObject::tr("insertintomayplestoryvalues(0,'yuyuyu','123456');"));


查询数据的方法:

query.exec(QObject::tr("select*frommayplestory;"));



以上“”中的是真正平时数据库的命令,着这里用tr表示输入。


3数据库我们建立好了,那就读取ui上输入的数据来判断,和qt学习4里面的思路是一样的,

当判断成功,就放回accept信号到main()中。

现在怎么判断呢,不在是

if(my1.exec()==QDialog::Accepted)

{

w.show();

}

而是用if(账号==数据库value(1)&&密码==数据库value(2))

{

accept();发出accept信号表示成功

break;把accept信号回送到main中。

}

最后在main函数中使用if判断是否成功,

if(login.exec()==QDialog::Accepted)

{

w.show();

returna.exec();

}


4代码如下:

logindlg.h

#ifndefCONNECTION_H
#defineCONNECTION_H

#include<QDialog>

namespaceUi{
classloginDlg;
}

classloginDlg:publicQDialog
{
Q_OBJECT

public:
explicitloginDlg(QWidget*parent=0);
~loginDlg();

privateslots:
voidon_loginBtn_clicked();

private:
Ui::loginDlg*ui;

};

#endif//LOGINDLG_H


widget.h

#ifndefWIDGET_H
#defineWIDGET_H

#include<QWidget>
#include<QtSql/QSqlDatabase>
#include<QtSql/QSqlQuery>
#include<QtSql/QSqlError>
#include<QDebug>
#include<QMessageBox>
#include<QCoreApplication>
staticboolcreateConnection()
{
QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mayplestory.db");
if(!db.open())
{
QMessageBox::critical(0,qApp->tr("Cannotopendatabase"),qApp->tr("unabletoestabilishedadatabaseconnection"),QMessageBox::Cancel);
returnfalse;
}

qDebug()<<"createdbegin";
QSqlQueryquery;
query.exec(QObject::tr("createtablemayplestory(idintprimarykey,namevarchar(20),passwordvarchar(20));"));
query.exec(QObject::tr("insertintomayplestoryvalues(0,'yuyuyu','123456');"));

//query.exec("select*frominformation");
qDebug()<<"createdend";
returntrue;

}
namespaceUi{
classWidget;
}

classWidget:publicQWidget
{
Q_OBJECT

public:
explicitWidget(QWidget*parent=0);
~Widget();

private:
Ui::Widget*ui;
QSqlDatabasedb;

};

#endif//WIDGET_H


logindlg.cpp

#include"logindlg.h"
#include"ui_logindlg.h"
#include<QtGui>
#include"widget.h"

loginDlg::loginDlg(QWidget*parent):
QDialog(parent),
ui(newUi::loginDlg)
{

ui->setupUi(this);
ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
//ui->pushButton->setFlat(true);

}

loginDlg::~loginDlg()
{
deleteui;
}

voidloginDlg::on_loginBtn_clicked()
{

QSqlQueryquery;
query.exec(QObject::tr("select*frommayplestory;"));

while(query.next())
{

if(ui->usrLineEdit->text().trimmed()==query.value(1)&&ui->pwdLineEdit->text()==query.value(2))
{
accept();
break;
}
if(query.next()==NULL)
{
QMessageBox::warning(this,tr("Warning"),tr("usernameorpassworderror!!!"),QMessageBox::Yes);
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
}

}

}


main.cpp


#include<QtGui/QApplication>
#include"widget.h"
#include"logindlg.h"

intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
Widgetw;

loginDlglogin;
if(!createConnection())
qDebug()<<"unconnect";
else
qDebug()<<"connect";
login.show();
if(login.exec()==QDialog::Accepted)
{
w.show();
returna.exec();
}
elsereturn0;

}


widget.cpp


#include"widget.h"
#include"ui_widget.h"

Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{

ui->setupUi(this);
}

Widget::~Widget()
{
deleteui;
}







5.结果显示,输入账号yuyuyu和密码:





失败了:





成功:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航