Qt(day5)

思维导图

将登录操作和数据库绑定 

mywnd.h

#ifndef MYWND_H
#define MYWND_H

#include <QMainWindow>
#include<QLabel>
#include<QLineEdit>
#include<QPushButton>
#include<QDebug>
#include<QMessageBox>
#include"second.h"
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlRecord>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWnd; }
QT_END_NAMESPACE

class MyWnd : public QMainWindow
{
    Q_OBJECT

signals:
    void loginbtn_signal();

public slots:
    void registerbtn_slot();
    void loginbtn_slot();
    void cancelbtn_slot();

public:
    MyWnd(QWidget *parent = nullptr);
    ~MyWnd();

private:
    Ui::MyWnd *ui;
    QPushButton *registerbtn;
    QPushButton *loginbtn;
    QPushButton *cancelbtn;
    QLineEdit *usernameedit;
    QLineEdit *passwdedit;
    QLabel *logolab;
    QLabel *usernamelab;
    QLabel *passwdlab;

    Second *s1;

    QSqlDatabase db;
};
#endif // MYWND_H

mywnd.cpp

#include "mywnd.h"
#include "ui_mywnd.h"

MyWnd::MyWnd(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MyWnd)
{
    ui->setupUi(this);

    //将当前界面的信号,与s1界面的槽函数进行连接
    s1=new Second;
    connect(this,&MyWnd::loginbtn_signal,s1,&Second::jump_slot);

    //对页面进行修改
    this->setFixedSize(QSize(800,700)); //固定文件框的大小
    this->setWindowTitle("华清远见");   //设置文件的标题
    this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png")); //为标题加图片

    //设置logo图片
    logolab=new QLabel(this);  //构造一个lab,指定父组件
    logolab->resize(800,250);  //设置图片尺寸
    logolab->setPixmap(QPixmap(":/icon/logo.png"));  //设置logo图片
    logolab->setScaledContents(true);   //设置图片自适应

    //设置username图片
    usernamelab=new QLabel(this);  //构造一个lab,指定父组件
    usernamelab->resize(50,50);    //设置图片尺寸
    usernamelab->move(230,300);    //设置图片位置
    usernamelab->setPixmap(QPixmap(":/icon/username.jpg"));  //设置logo图片
    usernamelab->setScaledContents(true);   //设置图片自适应

    //设置passwd图片
    passwdlab=new QLabel(this);  //构造一个lab,指定父组件
    passwdlab->resize(50,50);    //设置图片尺寸
    passwdlab->move(230,380);    //设置图片位置
    passwdlab->setPixmap(QPixmap(":/icon/passwd.jpg"));  //设置logo图片
    passwdlab->setScaledContents(true);   //设置图片自适应

    //设置username输入文本框
    usernameedit=new QLineEdit(this);   //构造一个行编辑器,指定父组件
    usernameedit->resize(300,50);  //设置行编辑器大小
    usernameedit->move(300,300);   //设置行编辑器位置
    usernameedit->setEchoMode(QLineEdit::Normal);  //设置明文模式
    usernameedit->setPlaceholderText("username");  //设置占位符

    //设置passwd输入文本框
    passwdedit=new QLineEdit(this);   //构造一个行编辑器,指定父组件
    passwdedit->resize(300,50);  //设置行编辑器大小
    passwdedit->move(300,380);   //设置行编辑器位置
    passwdedit->setEchoMode(QLineEdit::Password);    //设置密文模式
    passwdedit->setPlaceholderText("passwd");    //设置占位符

    //设置注册按钮
    registerbtn=new QPushButton("注册",this);   //构造注册按键,指定父组件
    registerbtn->resize(380,60);   //设置按键大小
    //registerbtn->setIcon(QIcon(":/icon/login.png"));    //设置按键图标
    registerbtn->move(passwdlab->x(),passwdlab->y()+80); //设置按键位置

    //设置登录按钮
    loginbtn=new QPushButton("登录",this);   //构造登录按键,指定父组件
    loginbtn->resize(380,60);   //设置按键大小
    loginbtn->setIcon(QIcon(":/icon/login.png"));    //设置按键图标
    loginbtn->move(registerbtn->x(),registerbtn->y()+70); //设置按键位置


    //设置取消按钮
    cancelbtn=new QPushButton("取消",this);   //构造取消按键,指定父组件
    cancelbtn->resize(380,60);   //设置按键大小
    cancelbtn->setIcon(QIcon(":/icon/cancel.png"));   //设置按键图标
    cancelbtn->move(loginbtn->x(),loginbtn->y()+70); //设置按键位置

    //注册按键的信号与槽连接
    connect(registerbtn,&QPushButton::clicked,this,&MyWnd::registerbtn_slot);

    //登录按键的信号与槽连接
    connect(loginbtn,&QPushButton::clicked,this,&MyWnd::loginbtn_slot);

    //取消按键的信号与槽连接
    connect(cancelbtn,&QPushButton::clicked,this,&MyWnd::cancelbtn_slot);

    //先判断是否有数据库文件
    if(!db.contains("user.db")){
        //建一个数据库,给定使用的数据库类型
        db=QSqlDatabase::addDatabase("QSQLITE");
        //给刚刚创建的数据库设置名字
        db.setDatabaseName("user.db");
    }

    //打开数据库
    if(!db.open()){
        QMessageBox::information(this,"提示","数据库打开失败");
        return;
    }
    //实例化一个QSqlQuery的类对象
    QSqlQuery query;
    //准备sql语句
    QString sql="create table if not exists user("
                "username varchar(20) primary key,"
                "passwd varchar(20))";
    //执行sql语言
    if(!query.exec(sql)){
        QMessageBox::information(this,"提示","数据表创建失败");
        return;
    }

}

MyWnd::~MyWnd()
{
    delete ui;
}

void MyWnd::registerbtn_slot(){
    if(usernameedit->text()==""||passwdedit->text()==""){
        QMessageBox::information(this,"提示","用户名或密码不能为空");
        return;
    }
    else{
        //将数据获取
        QString username=usernameedit->text();
        QString passwd=passwdedit->text();

        //实例化一个QSqlQuery的类对象
        QSqlQuery query;
        //准备sql语句
        QString sql=QString("insert into user(username,passwd)"
                            "values('%1','%2')").arg(username).arg(passwd);
        //执行sql语句
        if(!query.exec(sql)){
            QMessageBox::information(this,"提示","注册失败");
            return;
        }
        else{
            QMessageBox::information(this,"成功","注册成功");
        }
    }
}

void MyWnd::loginbtn_slot(){
    QMessageBox box(this);      //基于属性版本实现消息对话框
    //将数据获取
    QString username=usernameedit->text();
    //实例化一个QSqlQuery的类对象
    QSqlQuery query;
    //准备sql语句
    QString sql=QString("select * from user where username='%1'").arg(username);
    //执行sql语句
    if(!query.exec(sql)){
        QMessageBox::information(this,"提示","查询失败");
        return;
    }
    QString passwd;
    while(query.next()){
        passwd=query.record().value("passwd").toString();

    }
    if(usernameedit->text()==""||passwdedit->text()==""){
        QMessageBox::information(this,"提示","用户名或密码不能为空");
    }
    else if(usernameedit->text()==username&&passwdedit->text()==passwd){
        box.setIcon(QMessageBox::Information);
        box.setWindowTitle("登陆成功");
        box.setText("登陆成功");
        box.setStandardButtons(QMessageBox::Ok);
        box.setDefaultButton(QMessageBox::Ok);
        box.exec();
        emit loginbtn_signal();     //发射跳转的信号
        this->hide();   //隐藏第一个页面
    }
    else{
        box.setIcon(QMessageBox::Question);
        box.setWindowTitle("匹配错误");
        box.setText("账号密码不匹配,是否重新登录?");
        box.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
        box.setDefaultButton(QMessageBox::Ok);
        int ret=box.exec();
        if(ret==QMessageBox::Ok){
            usernameedit->clear(); //清空用户框中的内容
            passwdedit->clear(); //清空密码框中的内容
        }
        else{
            this->close();  //关闭页面
        }
    }
}

void MyWnd::cancelbtn_slot(){
    int ret=QMessageBox::warning(this,      //基于静态成员函数版本的消息对话框
                                 "是否退出",
                                 "是否确定要退出登录?",
                                 QMessageBox::Yes|QMessageBox::No,
                                 QMessageBox::No);
    if(ret==QMessageBox::Yes){
        this->close();
    }
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值