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


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

    一样,  跳出mainwidget对话框

    不一样,跳出消息错误框

      今天就是要进去,

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

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

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

    image

    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 = 0);
        ~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(0,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 = 0);
        ~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(1)&& ui-> pwdLineEdit->text() == query.value(2)  )
             {
                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 0;
    
    
    }
     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   和   密码 :
    image
     
    失败了:
    image
     
    成功:
    image
  • 相关阅读:
    Web 安全 —— XSS攻击的原理
    HTTP缓存
    JavaScript 事件循环机制(Event Loop)
    搭建前端监控系统
    电脑 直接下载cyida deb
    基于样例的传统图像修补算法实现
    Android WorkManager 定时任务
    Android WorkManager工作约束,延迟与查询工作
    微信小程序地图如何显示附近厕所WC步行路线
    物流解决方案再添利器 腾讯位置服务推出货运“三件套”
  • 原文地址:https://www.cnblogs.com/mayplestory/p/3921809.html
Copyright © 2020-2023  润新知