qt学习 (五) 登陆界面之连接按钮
2014-08-19 12:56
387 查看
登陆步骤是比对输入的账号密码与数据库中的表项目是否一致
一样,跳出mainwidget对话框
不一样,跳出消息错误框
今天就是要进去,
因为进去以后是widget的窗口,所以把用来核对消息的数据库放在MAINwidget。cpp中,
再拿一个用户点击连接的子类login.cpp,就在这里面画用户登录账号密码textEdit
1除了textEdit基本都是button慢慢加。登录界面可以学的东西很多。
2在widget。h文件中加入数据库所需要的头文件,
#include<QtSql/QSqlDatabase>
使用数据库的基本命令
QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");//建数据库
一样,跳出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和密码:
失败了:
成功: