Qt 的范例 Demo (登陆验证,数据库增删改查)

用Qt 做了一个Demo 实现数据库增删改查的功能

登陆页面

Qt 的范例 Demo (登陆验证,数据库增删改查)_第1张图片

 

数据库页面,没有登陆前只能查看

 

登陆后可以新增,修改,删除

 

条件查询

Qt 的范例 Demo (登陆验证,数据库增删改查)_第2张图片

新增

Qt 的范例 Demo (登陆验证,数据库增删改查)_第3张图片

修改

Qt 的范例 Demo (登陆验证,数据库增删改查)_第4张图片

Qt 的范例 Demo (登陆验证,数据库增删改查)_第5张图片

数据库资料

Qt 的范例 Demo (登陆验证,数据库增删改查)_第6张图片

部分代码

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),ui(new Ui::MainWindow)
{

    ui->setupUi(this);

    if(!connectDB()){
        qDebug()<<"无法连接数据库";
        return;
    };

    if(!basicSetup()){
        qDebug()<<"basicSetup 失败";
        return;
    };

    if(!createActions()){
        qDebug()<<"createActions 失败";
        return;
    };

    if(!createMenus()){
        qDebug()<<"createMenus 失败";
        return;
    };
}

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


bool MainWindow::basicSetup()
{
    resize(700,500);
    setWindowTitle("Hello QT");

    mdiArea = new QMdiArea;
    setCentralWidget(mdiArea);
    mdiArea->setBackground(Qt::NoBrush);
    //mdiArea->setStyleSheet("background-image:url(D:/workspaceForQt/FirstQtDemo/3.jpg)");
    mdiArea->setStyleSheet("background-color:yellowgreen");
    mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    mdiArea->show();

    setWindowIcon(QIcon("main.png"));//设置窗口光标
    return true;
}

bool MainWindow::createActions()
{

    connect(&confirm_btn,&QPushButton::clicked,this,[=]{closeDialog(true,false);});
    connect(&cancel_btn,&QPushButton::clicked,this,[=]{closeDialog(false,true);});


    loginAction = new QAction(tr("登录"),this);
    loginAction->setShortcut(tr("Ctrl+i"));
    connect(loginAction, &QAction::triggered, this,&MainWindow::on_login);


    logoutAction = new QAction(tr("注销"),this);
    logoutAction->setShortcut(tr("Ctrl+o"));
    connect(logoutAction, &QAction::triggered, this,&MainWindow::on_logout);


    exitAction = new QAction(tr("退出"),this);
    exitAction->setShortcut(tr("Ctrl+q"));
    connect(exitAction, &QAction::triggered, this,&MainWindow::exit);

    showAllData_ActPtr = new QAction(tr("显示全部资料"),this);
    showAllData_ActPtr->setEnabled(true);
    connect(showAllData_ActPtr, &QAction::triggered, this,&MainWindow::showAllData);


    selectByAge_ActPtr = new QAction(tr("依照年龄选择"),this);
    selectByAge_ActPtr->setEnabled(true);
    connect(selectByAge_ActPtr, &QAction::triggered, this,&MainWindow::selectByAge);

    addData_ActPtr = new QAction(tr("新增资料(需登陆)"),this);
    addData_ActPtr->setEnabled(false);
    connect(addData_ActPtr, &QAction::triggered, this,&MainWindow::addData);


    deleteData_ActPtr = new QAction(tr("删除资料(需登陆)"),this);
    deleteData_ActPtr->setEnabled(false);
    connect(deleteData_ActPtr, &QAction::triggered, this,&MainWindow::deleteData);


    updateData_ActPtr = new QAction(tr("更新资料(需登陆)"),this);
    updateData_ActPtr->setEnabled(false);
    connect(updateData_ActPtr, &QAction::triggered, this,&MainWindow::updateData);


    helpAction = new QAction(tr("帮助"), this);
    helpAction->setShortcut(tr("Ctrl+s"));
    connect(helpAction, &QAction::triggered, this,[=]{
        QMessageBox::information(this, "帮助", "数据库账号密码都是root,数据库名称data,数据库里建立一张表student,column包括id,pwd,age,description,可以运行附件中的sql");
    });

    aboutAction = new QAction(tr("关于"), this);
    aboutAction->setShortcut(tr("Ctrl+t"));
    connect(aboutAction, &QAction::triggered, this,[=]
    {
        QMessageBox::information(this, "关于", "参考视频和网络,练习用的,无版权");
    });



    return true;
}

bool MainWindow::createMenus()
{

    adminMenu = menuBar()->addMenu(tr("管理"));//添加管理菜单
    adminMenu->addAction(loginAction);
    adminMenu->addAction(logoutAction);
    adminMenu->addSeparator();//加入分隔符
    adminMenu->addAction(exitAction);

    dataMenu = menuBar()->addMenu(tr("数据"));//添加数据菜单
    dataMenu->addAction(showAllData_ActPtr);

    dataMenu->addAction(selectByAge_ActPtr);


    dataMenu->addAction(addData_ActPtr);
    dataMenu->addAction(deleteData_ActPtr);
    dataMenu->addAction(updateData_ActPtr);

    helpMenu = menuBar()->addMenu(tr("帮助"));
    helpMenu->addAction(helpAction);
    helpMenu->addSeparator();
    helpMenu->addAction(aboutAction);


    return true;
}

void MainWindow::on_login()
{

    LoginDlg dlg(db);
    dlg.exec();
    if(dlg.login_success==true)
    {
        addData_ActPtr->setText("新增资料");
        addData_ActPtr->setEnabled(true);

        deleteData_ActPtr->setText("删除资料");
        deleteData_ActPtr->setEnabled(true);


        updateData_ActPtr->setText("更新资料");
        updateData_ActPtr->setEnabled(true);

    }
}

void MainWindow::on_logout()
{


    addData_ActPtr->setText("新增资料(需登陆)");
    addData_ActPtr->setEnabled(false);

    deleteData_ActPtr->setText("删除资料(需登陆)");
    deleteData_ActPtr->setEnabled(false);


    updateData_ActPtr->setText("更新资料(需登陆)");
    updateData_ActPtr->setEnabled(false);


    QMessageBox::information(this,"","登出成功");

}


void MainWindow::exit()
{
    close();
}

void MainWindow::showAllData()
{

    QStandardItemModel *model=new QStandardItemModel;
    QString sql="select * from student";
    bool res=db->sql_open(sql,&model);
    if(!res){
        qDebug()<<"无法取得数据库资料";
    }else
    {
        showByModel(model);

    }

}


void MainWindow::selectByAge()
{

    dlg=new QDialog;
    QGridLayout layout(dlg);
    QLabel label1("年龄上限");
    QLabel label2("年龄下限");
    QLineEdit ageCell;
    QLineEdit ageFloor;

    confirm_btn.setText("查询");
    cancel_btn.setText("取消");

    layout.addWidget(&label1,0,0);
    layout.addWidget(&ageCell,0,1);
    layout.addWidget(&label2,1,0);
    layout.addWidget(&ageFloor,1,1);
    layout.addWidget(&confirm_btn,2,0);
    layout.addWidget(&cancel_btn,2,1);
    layout.setColumnStretch(0,1);
    layout.setColumnStretch(1,1);
    dlg->exec();
    dlg=nullptr;

    if(isConfirm){
        QString str=ageCell.text();
        QString str2=ageFloor.text();
        bool ageCellValid=true;
        bool ageFloorValid=true;


        if(str.trimmed().isEmpty()){
            ageCellValid=false;
        }
        if(str2.trimmed().isEmpty()){
            ageFloorValid=false;
        }

        if(!ageCellValid&&!ageFloorValid){
            QMessageBox::warning(this,"warn","年龄上限下限不能同时为空");
            return;
        }


        QString sql;
        if(ageCellValid&&ageFloorValid){

            sql="select * from student where age>="+ageFloor.text()+" and age<="+ageCell.text();
        }else if (ageCellValid) {
            sql="select * from student where age<="+ageCell.text();
        }else {
            sql="select * from student where age>="+ageFloor.text();
        }

        QStandardItemModel *model=new QStandardItemModel;
        bool res=db->sql_open(sql,&model);
        if(!res){
            qDebug()<<"无法取得数据库资料";
        }else
        {
            showByModel(model);
        }
    }


}


void MainWindow::addData()
{
    dlg=new QDialog;
    QGridLayout layout(dlg);
    QLabel label1("ID");
    QLabel label2("密码");
    QLabel label3("年龄");
    QLabel label4("描述");

    QLineEdit edit1;
    QLineEdit edit2;
    QLineEdit edit3;
    QLineEdit edit4;


    confirm_btn.setText("确定");
    cancel_btn.setText("取消");

    layout.addWidget(&label1,0,0);
    layout.addWidget(&edit1,0,1);
    layout.addWidget(&label2,1,0);
    layout.addWidget(&edit2,1,1);
    layout.addWidget(&label3,2,0);
    layout.addWidget(&edit3,2,1);
    layout.addWidget(&label4,3,0);
    layout.addWidget(&edit4,3,1);


    layout.addWidget(&confirm_btn,5,0);
    layout.addWidget(&cancel_btn,5,1);
    layout.setColumnStretch(0,1);
    layout.setColumnStretch(1,1);
    dlg->exec();
    dlg=nullptr;

    if(isConfirm){
        QString str1=edit1.text();
        QString str2=edit2.text();
        QString str3=edit3.text();
        QString str4=edit4.text();

        if(str1.trimmed().isEmpty()||str2.trimmed().isEmpty()||str3.trimmed().isEmpty()||str4.trimmed().isEmpty())
        {
            QMessageBox::warning(this,"warn","ID,密码,年龄,描述不能为空");
            return;
        }
        if(isIdExist(str1))
        {
            QMessageBox::warning(this,"warn","ID已经存在");
            return;
        }
        QString sql="INSERT INTO student VALUES ('"+str1+"', '"+str2+"', '"+str3+"', '"+str4+"')";

        bool res=db->sql_exec(sql);
        if(res){
            QMessageBox::information(this,"info","操作成功");
            showAllData();
        }else
        {
            QMessageBox::warning(this,"warn","操作失败");
            showAllData();
        }
    }

}

void MainWindow::deleteData()
{
    dlg=new QDialog;
    QGridLayout layout(dlg);
    QLabel label1("ID");

    QLineEdit edit1;

    confirm_btn.setText("确定");
    cancel_btn.setText("取消");

    layout.addWidget(&label1,0,0);
    layout.addWidget(&edit1,0,1);

    layout.addWidget(&confirm_btn,1,0);
    layout.addWidget(&cancel_btn,1,1);
    layout.setColumnStretch(0,1);
    layout.setColumnStretch(1,1);
    dlg->exec();
    dlg=nullptr;

    if(isConfirm){
        QString str1=edit1.text();

        if(str1.trimmed().isEmpty())
        {
            QMessageBox::warning(this,"warn","ID不能为空");
            return;
        }
        QString sql="delete from student where id= '"+str1+"'";

        bool res=db->sql_exec(sql);
        if(res){
            QMessageBox::information(this,"info","操作成功");
            showAllData();
        }else
        {
            QMessageBox::warning(this,"warn","操作失败");
            showAllData();
        }
    }
}


void MainWindow::updateData()
{

    dlg=new QDialog;
    QGridLayout layout(dlg);
    QLabel label1("要修改的ID");

    QLineEdit edit1;

    confirm_btn.setText("确定");
    cancel_btn.setText("取消");

    layout.addWidget(&label1,0,0);
    layout.addWidget(&edit1,0,1);

    layout.addWidget(&confirm_btn,1,0);
    layout.addWidget(&cancel_btn,1,1);
    layout.setColumnStretch(0,1);
    layout.setColumnStretch(1,1);
    dlg->exec();
    dlg=nullptr;

    if(isConfirm)
    {
        QString str_id=edit1.text();

        if(str_id.trimmed().isEmpty())
        {
            QMessageBox::warning(this,"warn","ID不能为空");
            return;
        }
        if(!isIdExist(str_id)){
            QMessageBox::warning(this,"warn","ID不存在");
            return;
        }

        QString sql="select * from student where id= '"+str_id+"'";

        QStandardItemModel *model=new QStandardItemModel;
        bool res=db->sql_open(sql,&model);

        if(!res)
        {
            QMessageBox::warning(this,"warn","操作失败");
            return;
        }

        QString str_pwd=model->takeItem(0,1)->text();
        QString str_age=model->takeItem(0,2)->text();
        QString str_des=model->takeItem(0,3)->text();


        dlg=new QDialog;
        dlg=new QDialog;
        QGridLayout layout(dlg);
        QLabel label1("ID(不可修改)");
        QLabel label2("密码");
        QLabel label3("年龄");
        QLabel label4("描述");

        QLineEdit edit1;
        edit1.setText(str_id);
        edit1.setReadOnly(true);
        QLineEdit edit2;
        edit2.setText(str_pwd);

        QLineEdit edit3;
        edit3.setText(str_age);
        QLineEdit edit4;
        edit4.setText(str_des);

        confirm_btn.setText("确定");
        cancel_btn.setText("取消");

        layout.addWidget(&label1,0,0);
        layout.addWidget(&edit1,0,1);
        layout.addWidget(&label2,1,0);
        layout.addWidget(&edit2,1,1);
        layout.addWidget(&label3,2,0);
        layout.addWidget(&edit3,2,1);
        layout.addWidget(&label4,3,0);
        layout.addWidget(&edit4,3,1);


        layout.addWidget(&confirm_btn,5,0);
        layout.addWidget(&cancel_btn,5,1);
        layout.setColumnStretch(0,1);
        layout.setColumnStretch(1,1);

        dlg->exec();
        if(isConfirm)
        {
            str_pwd=edit2.text();
            str_age=edit3.text();
            str_des=edit4.text();
            sql="UPDATE student SET pwd='"+str_pwd+"', age='"+str_age+"', description='"+str_des+"' WHERE id='"+str_id+"'";
            int res=db->sql_exec(sql);
            if(res)
            {
                QMessageBox::information(this,"info","操作成功");
                showAllData();
            }else
            {
                QMessageBox::warning(this,"warning","操作失败");
                showAllData();
            }

        }

    }


}


bool MainWindow::connectDB()
{
    db=new MysqlUtil();
    bool res;
    if(!db->connected)
    {
        res = db->sql_connect();
        if (!res)
        {
            QMessageBox::information(this, "登录失败","无法连接数据库");
            return false;
        }else {
            db->connected=true;
        }

    }
    return true;

}



void MainWindow::showByModel(QStandardItemModel *model)
{
    QTableView *view1 = new QTableView;
    view1->setAttribute(Qt::WA_DeleteOnClose);//view在close的时候自动会delete,这个时候如果view有modul的话,这个modul会被view自动释放。
    //view1->setStyleSheet("border-image: url(3.jpg);");//设置widget背景图片
    //view1继承自widget,如果没有modul,那么view不会显示任何数据.
    view1->setModel(model);
    //view1->setStyleSheet("background-color:lightgreen");
    view1->resizeColumnsToContents();
    view1->resizeRowsToContents();
    mdiArea->addSubWindow(view1);
    view1->showMaximized();
}

void MainWindow::closeDialog(bool confirm,bool cancel){
    isConfirm=confirm;
    isCancel=cancel;
    dlg->close();

}



bool MainWindow::isIdExist(QString id)
{
    QStandardItemModel *model=new QStandardItemModel;
    QString sql="select * from student where id='"+id+"'";
    bool res=db->sql_open(sql,&model);
    if(!res)
    {
        QMessageBox::warning(this,"warn","操作失败");
        return false;
    }
    QList list=model->takeRow(0);
    if(list.isEmpty()){
        return false;
    }else{
        return true;
    }

}

 

 

 

 

你可能感兴趣的:(C++)