登陆步骤是比对输入的账号密码与数据库中的表项目是否一致

一样,  跳出mainwidget对话框

不一样,跳出消息错误框

今天就是要进去,

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

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

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

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

#include <QtSql/QSqlDatabase>

#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
数据库有基本的驱动Qsqlite
  有比较好的使用数据库的模式, 就是把数据库基本创建放在一个文件中, 查改增删都去调用这个就行了。
 

使用数据库的基本命令

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//建数据库

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

query.exec(QObject::tr("create table mayplestory(id int primary key, name varchar(20), password varchar(20));"));

插入数据: 
   query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');"));
 
查询数据的方法:
query.exec(QObject::tr("select * from mayplestory;"));
  以上“”中的 是真正平时数据库的命令,着这里用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();
            return a.exec();
        }
 

4 代码如下:

logindlg.h

#ifndef CONNECTION_H
#define CONNECTION_H #include <QDialog> namespace Ui {
class loginDlg;
} class loginDlg : public QDialog
{
Q_OBJECT public:
explicit loginDlg(QWidget *parent = );
~loginDlg(); private slots:
void on_loginBtn_clicked(); private:
Ui::loginDlg *ui; }; #endif // LOGINDLG_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
#include <QMessageBox>
#include <QCoreApplication>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mayplestory.db");
if(!db.open())
{
QMessageBox::critical(,qApp->tr("Cannot open database"),qApp->tr("unable to estabilished a database connection"),QMessageBox::Cancel);
return false;
} qDebug() << "created begin";
QSqlQuery query;
query.exec(QObject::tr("create table mayplestory(id int primary key, name varchar(20), password varchar(20));"));
query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');")); // query.exec("select *from information");
qDebug() << "created end" ;
return true; }
namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private:
Ui::Widget *ui;
QSqlDatabase db; }; #endif // WIDGET_H

logindlg.cpp

#include "logindlg.h"
#include "ui_logindlg.h"
#include <QtGui>
#include "widget.h" loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::loginDlg)
{ ui->setupUi(this);
ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
//ui->pushButton->setFlat(true); } loginDlg::~loginDlg()
{
delete ui;
} void loginDlg::on_loginBtn_clicked()
{ QSqlQuery query;
query.exec(QObject::tr("select * from mayplestory;")); while(query.next())
{ if(ui-> usrLineEdit->text().trimmed() == query.value()&& ui-> pwdLineEdit->text() == query.value() )
{
accept();
break;
}
if (query.next() == NULL)
{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error !!!"),QMessageBox::Yes);
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
} } }
 main.cpp
#include <QtGui/QApplication>
#include "widget.h"
#include "logindlg.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w; loginDlg login;
if(!createConnection())
qDebug()<<"unconnect";
else
qDebug()<<"connect";
login.show();
if(login.exec() == QDialog::Accepted)
{
w.show();
return a.exec();
}
else return ; }
 widget.cpp
#include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{ ui->setupUi(this);
} Widget::~Widget()
{
delete ui;
}
 
 
 
 
 
5.结果显示,  输入账号yuyuyu   和   密码 :
 
失败了:
 
成功:

最新文章

  1. Linux的Service/Daemon你真的懂了吗?
  2. CSS3制作同心圆进度条
  3. 每天一个linux命令(30): chown命令
  4. vs2013怎么打开vs2010的解决方案
  5. body中设置-webkit-scrollbar竖向滚动条,在手机浏览器上无效
  6. 深入理解ASP.NET 5的依赖注入
  7. python的基础类源码解析——collection类
  8. 20步打造最安全的NGINX WEB服务器
  9. 怎么使用Docker搭建PHP开发环境呢?
  10. 中文+django1.9+python3.5一些注意点
  11. UVA 11865 Stream My Contest(最小树形图)
  12. 配置 Web Deploy 的步骤 -摘自网络
  13. canvas图表详解系列(1):柱状图
  14. poj 2486 Apple Tree(树形DP 状态方程有点难想)
  15. java生成/解析二维码
  16. go如何进行交叉编译
  17. BackgroundWorker学习笔记
  18. 《论vue在前后端分离项目中的实践之年终总结》
  19. Exp7
  20. Solr 数字字符不能搜索的一个问题

热门文章

  1. linux内核源码——内存管理:段页式内存及swap
  2. 【BZOJ1396】识别子串(后缀自动机,线段树)
  3. 如何稀释 流事件 (如,onscroll、change、input、mouseover 等 事件)
  4. php面试专题---2、常量及数据类型考点
  5. linux设备驱动第三篇:写一个简单的字符设备驱动
  6. 转:父类私有变量是否被子类继承详细解说(答案:内存中存在,但sun公司定义为不继承)
  7. Django ajax小例
  8. JavaScript的日期对象
  9. python 字典(dictionary)一些方法
  10. Java Web servlet中的cookie