中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

武漢網(wǎng)站優(yōu)化方案網(wǎng)絡推廣十大平臺

武漢網(wǎng)站優(yōu)化方案,網(wǎng)絡推廣十大平臺,武漢網(wǎng)站建設全包,沒有網(wǎng)站域名備案目錄 實現(xiàn)使用數(shù)據(jù)庫的登錄注冊功能 頭文件: registrwidget.h: widget.h: 源文件: registrwidget.c: widget.h: 效果圖: 思維導圖 實現(xiàn)使用數(shù)據(jù)庫的登錄注冊功能 頭文件: registrwidget.h: #ifndef REGISTRWIDGET_H #de…

目錄

實現(xiàn)使用數(shù)據(jù)庫的登錄注冊功能

頭文件:

registrwidget.h:

widget.h:

源文件:

registrwidget.c:

widget.h:

效果圖:

思維導圖


實現(xiàn)使用數(shù)據(jù)庫的登錄注冊功能
頭文件:
registrwidget.h:
#ifndef REGISTRWIDGET_H
#define REGISTRWIDGET_H#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QMessageBox>
#include <QSqlDatabase>     //數(shù)據(jù)庫管理類
#include <QSqlQuery>        //執(zhí)行sql語句的類
#include <QSqlRecord>       //記錄數(shù)據(jù)庫記錄的類namespace Ui {
class registrwidget;
}class registrwidget : public QWidget
{Q_OBJECT
public slots:void jumpToRegister_slot();public:explicit registrwidget(QWidget *parent = nullptr);~registrwidget();// void jumpToWid();void cancel_btn_clicked_slot();void register_btn_clicked_slot();private:Ui::registrwidget *ui;QPushButton *register_btn;QPushButton *cancel_btn;QLabel *lab1;QLineEdit *edit1;QLineEdit *edit2;QLineEdit *edit3;QLabel *lab2;QLabel *lab3;QLabel *lab4;QSqlDatabase db;        //定義一個數(shù)據(jù)庫的類對象//Widget *wid;
};#endif // REGISTRWIDGET_H
widget.h:
#ifndef WIDGET_H
#define WIDGET_H#include "registrwidget.h"
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QObject>
#include <QMessageBox>
#include <QSqlDatabase>     //數(shù)據(jù)庫管理類
#include <QSqlQuery>        //執(zhí)行sql語句的類
#include <QSqlRecord>       //記錄數(shù)據(jù)庫記錄的類QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();signals://void jumpToLogin();void jumpToRegister();public slots:void loginBtn_slot();void cancelBtn_slot();void registerBtn_slot();private:Ui::Widget *ui;QLabel *lab1;QLineEdit *edit1;QLineEdit *edit2;QLabel *lab2;QLabel *lab3;QPushButton *btn1;QPushButton *btn2;QPushButton *btn3;QSqlDatabase db;        //定義一個數(shù)據(jù)庫的類對象//login *l1;registrwidget *reg_wid;
};
#endif // WIDGET_H
源文件:
registrwidget.c:
#include "registrwidget.h"
#include "ui_registrwidget.h"void registrwidget::jumpToRegister_slot()
{this->show();   //展示自己的界面
}registrwidget::registrwidget(QWidget *parent) :QWidget(parent),ui(new Ui::registrwidget)
{ui->setupUi(this);//判斷自己的數(shù)據(jù)庫對象中是否包含了要處理的數(shù)據(jù)庫,如果沒有就添加,如果包含就打開if(!db.contains("registeredusr.db")){//添加一個數(shù)據(jù)庫db = QSqlDatabase::addDatabase("QSQLITE");//設置數(shù)據(jù)庫的名字db.setDatabaseName("registeredusr.db");}//此時已經(jīng)有一個名為registeredusr.db的數(shù)據(jù)庫//打開數(shù)據(jù)庫if(!db.open()){QMessageBox::critical(this, "失敗", "打開失敗");return;}//說明數(shù)據(jù)庫打開成功//需要使用sql語句進行創(chuàng)建表的操作//準備sql語句QString sql("create table if not exists regedusr("       //創(chuàng)建表"usrname varchar(20) primary key,"              //賬號"passwd varchar(20))");             //密碼//準備語句執(zhí)行者QSqlQuery query;//讓語句執(zhí)行者執(zhí)行sql語句if(!query.exec(sql)){QMessageBox::critical(this, "失敗", "創(chuàng)建失敗");return;}//將圖形化界面的名字改成Login screen(登錄界面)this->setWindowTitle("Register screen");//將ui的圖標改成想要的this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));//設置ui界面的大小為合適的大小this->setFixedSize(QSize(400,300));//插入一個label,它的寬度與ui等寬,高度大約為整個ui界面高度的4/9lab1 = new QLabel(this);lab1->resize(QSize(400,133));lab1->move(0,0);//label的內(nèi)容要是一張圖片lab1->setPixmap(QPixmap(":/icon/logo.png"));//設置圖片填充lab1->setScaledContents(true);//插入兩個行編輯器,第一個用于輸入賬號edit1 = new QLineEdit(this);edit1->resize(QSize(240,30));edit1->move(110,145);edit1->setPlaceholderText("賬號");//第二個用于輸入密碼edit2 = new QLineEdit(this);edit2->resize(QSize(240,30));edit2->move(edit1->x(),edit1->y()+35);edit2->setPlaceholderText("密碼");//第二個回顯模式是密碼模式edit2->setEchoMode(QLineEdit::Password);//第三個用于確認密碼edit3 = new QLineEdit(this);edit3->resize(QSize(240,30));edit3->move(edit1->x(),edit2->y()+35);edit3->setPlaceholderText("請確認密碼");//第三個回顯模式也是密碼模式edit3->setEchoMode(QLineEdit::Password);//每個行編輯器前都要有一個label,內(nèi)容為圖片lab2 = new QLabel(this);lab2->resize(37,30);lab2->setPixmap(QPixmap(":/icon/userName.jpg"));lab2->setScaledContents(true);lab2->move(edit1->x()-60,edit1->y());lab3 = new QLabel(this);lab3->resize(37,30);lab3->setPixmap(QPixmap(":/icon/passwd.jpg"));lab3->setScaledContents(true);lab3->move(edit2->x()-60,edit2->y());lab4 = new QLabel(this);lab4->resize(37,30);lab4->setPixmap(QPixmap(":/icon/passwd.jpg"));lab4->setScaledContents(true);lab4->move(edit3->x()-60,edit3->y());//實例化登錄按鈕和退出按鈕register_btn = new QPushButton("注冊", this);cancel_btn = new QPushButton("取消", this);register_btn->resize(60,30);cancel_btn->resize(60,30);register_btn->move(120, edit3->y()+45);cancel_btn->move(register_btn->x()+120, register_btn->y());//將取消按鈕的按下信號與對應的槽函數(shù)連接,點擊取消就關閉注冊界面connect(cancel_btn, &QPushButton::clicked, this, &registrwidget::cancel_btn_clicked_slot);//將注冊按鈕的按下信號與對應的槽函數(shù)連接,點擊注冊就進行對應的操作connect(register_btn, &QPushButton::clicked, this, &registrwidget::register_btn_clicked_slot);
}registrwidget::~registrwidget()
{delete ui;
}void registrwidget::cancel_btn_clicked_slot()
{//使用靜態(tài)成員函數(shù)的方式打開一個對話框int ret = QMessageBox::question(this,"取消","是否確認取消注冊",QMessageBox::Yes|QMessageBox::No,QMessageBox::No);switch (ret) {case QMessageBox::Yes://確認就退出this->close();break;case QMessageBox::No://否就不進行任何操作break;default://應該不會有這種可能性break;}
}void registrwidget::register_btn_clicked_slot()
{QString usrname = edit1->text();QString passwd = edit2->text();QString repasswd = edit3->text();//確保每個容器中都有數(shù)據(jù)if(usrname.isEmpty() ||passwd.isEmpty() || repasswd.isEmpty()){QMessageBox::warning(this, "警告", "請將信息填寫完整");return;}//判斷,如果兩個密碼輸入框中的密碼不同,就給出消息框提示,并清空密碼框if(passwd != repasswd){QMessageBox::critical(this, "錯誤", "請確保兩次密碼都輸入正確");edit2->clear();edit3->clear();return;}//此時,容器中都有數(shù)據(jù),且確認密碼正確,判斷用戶名是否存在//準備sql語句QString sql = QString("select passwd from regedusr where usrname='%1';").arg(usrname);//準備語句執(zhí)行者QSqlQuery query;//讓語句執(zhí)行者執(zhí)行sql語句if(!query.exec(sql)){QMessageBox::critical(this, "失敗", "注冊失敗");return;}if(query.next()){QMessageBox::critical(this, "失敗", "用戶名已存在");return;}//此時可以進行插入操作//準備sql語句sql = QString("insert into regedusr(usrname, passwd)""values('%1', '%2')").arg(usrname).arg(passwd);//讓語句執(zhí)行者執(zhí)行sql語句if(!query.exec(sql)){QMessageBox::critical(this, "失敗", "注冊失敗");return;}//此時注冊成功QMessageBox::information(this, "成功", "注冊成功");//注冊成功后自動退出注冊界面this->close();}
widget.h:
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);reg_wid = new registrwidget;//判斷自己的數(shù)據(jù)庫對象中是否包含了要處理的數(shù)據(jù)庫,如果沒有就添加,如果包含就打開if(!db.contains("registeredusr.db")){//添加一個數(shù)據(jù)庫db = QSqlDatabase::addDatabase("QSQLITE");//設置數(shù)據(jù)庫的名字db.setDatabaseName("registeredusr.db");}//此時已經(jīng)有一個名為registeredusr.db的數(shù)據(jù)庫//打開數(shù)據(jù)庫if(!db.open()){QMessageBox::critical(this, "失敗", "打開失敗");return;}//說明數(shù)據(jù)庫打開成功//需要使用sql語句進行創(chuàng)建表的操作//準備sql語句QString sql("create table if not exists regedusr("       //創(chuàng)建表"usrname varchar(20) primary key,"              //賬號"passwd varchar(20))");             //密碼//準備語句執(zhí)行者QSqlQuery query;//讓語句執(zhí)行者執(zhí)行sql語句if(!query.exec(sql)){QMessageBox::critical(this, "失敗", "創(chuàng)建失敗");return;}//將圖形化界面的名字改成Login screen(登錄界面)this->setWindowTitle("Login screen");//將ui的圖標改成想要的this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));//設置ui界面的大小為合適的大小this->setFixedSize(QSize(400,300));//插入一個label,它的寬度與ui等寬,高度大約為整個ui界面高度的4/9lab1 = new QLabel(this);lab1->resize(QSize(400,133));lab1->move(0,0);//label的內(nèi)容要是一張圖片lab1->setPixmap(QPixmap(":/icon/logo.png"));//設置圖片填充lab1->setScaledContents(true);//插入兩個行編輯器,第一個用于輸入賬號edit1 = new QLineEdit(this);edit1->resize(QSize(240,40));edit1->move(110,150);edit1->setPlaceholderText("賬號");//第二個用于輸入密碼edit2 = new QLineEdit(this);edit2->resize(QSize(240,40));edit2->move(edit1->x(),edit1->y()+55);edit2->setPlaceholderText("密碼");//第二個回顯模式是密碼模式edit2->setEchoMode(QLineEdit::Password);//每個行編輯器前都要有一個label,內(nèi)容為圖片lab2 = new QLabel(this);lab2->resize(50,40);lab2->setPixmap(QPixmap(":/icon/userName.jpg"));lab2->setScaledContents(true);lab2->move(edit1->x()-60,edit1->y());lab3 = new QLabel(this);lab3->resize(50,40);lab3->setPixmap(QPixmap(":/icon/passwd.jpg"));lab3->setScaledContents(true);lab3->move(edit2->x()-60,edit2->y());//要有兩個pushbutton,一個是登錄另一個是取消btn1 = new QPushButton("登錄",this);btn2 = new QPushButton("取消",this);//重設他們的尺寸btn1->resize(QSize(60,30));btn2->resize(btn1->size());//移動他們的位置到合適btn1->move(170,edit2->y()+55);btn2->move(270,edit2->y()+55);//內(nèi)容都會有一個圖片btn1->setIcon(QIcon(":/icon/login.png"));btn2->setIcon(QIcon(":/icon/cancel.png"));//實例化一個注冊按鈕btn3 = new QPushButton("注冊", this);btn3->resize(btn1->size());//移動到一個合適的位置btn3->move(btn1->x()-100,btn1->y());//將登錄按鈕點擊發(fā)信號與處理函數(shù)連接connect(this->btn1, &QPushButton::clicked, this, &Widget::loginBtn_slot);//將取消按鈕點擊發(fā)信號與處理函數(shù)連接connect(this->btn2, &QPushButton::clicked, this, &Widget::cancelBtn_slot);//將跳轉信號與registrwidget界面的處理函數(shù)連接connect(this, &Widget::jumpToRegister, reg_wid, &registrwidget::jumpToRegister_slot);//將注冊按鈕點擊信號與跳轉向注冊界面的信號連接,點擊注冊按鈕自動跳轉到注冊界面connect(this->btn3, &QPushButton::clicked, this, &Widget::registerBtn_slot);}Widget::~Widget()
{delete ui;
}void Widget::loginBtn_slot()
{QString usrname = edit1->text();QString passwd = edit2->text();//準備sql語句//按照用戶名查找密碼項QString sql = QString("select passwd from regedusr where usrname='%1';").arg(usrname);//準備語句執(zhí)行者QSqlQuery query;//讓語句執(zhí)行者執(zhí)行sql語句if(!query.exec(sql)){QMessageBox::critical(this, "失敗", "登錄失敗");return;}if(!query.next()){QMessageBox::critical(this, "登錄失敗", "用戶名不存在,請先注冊");edit2->clear();return;}else{//此時,數(shù)據(jù)表中對應的用戶名是存在對應密碼的if(passwd == query.value(0).toString()){//對象版實現(xiàn)打開一個信息對話框QMessageBox box(QMessageBox::Information,"登錄成功","登錄成功",QMessageBox::Ok,this);box.exec();}else{//對象版實現(xiàn)打開一個錯誤對話框QMessageBox box(QMessageBox::Critical,"錯誤","賬號密碼不匹配,是否重新登錄",QMessageBox::Ok|QMessageBox::Cancel,this);//設置默認選擇的按鈕box.setDefaultButton(QMessageBox::Ok);int ret = box.exec();//有兩個按鈕,需要判斷if(QMessageBox::Ok==ret){edit2->clear();}else{this->close();}}}
}void Widget::cancelBtn_slot()
{//使用靜態(tài)成員函數(shù)的方式打開一個對話框int ret = QMessageBox::question(this,"請問","是否確認要退出",QMessageBox::Yes|QMessageBox::No,QMessageBox::No);switch (ret) {case QMessageBox::Yes://確認就退出this->close();break;case QMessageBox::No://否就不進行任何操作break;default://應該不會有這種可能性break;}
}void Widget::registerBtn_slot()
{emit jumpToRegister();
}
效果圖:
使用一個未注冊的賬戶進行登錄:

點擊注冊:

如果用戶名已注冊:

正確輸入賬號和密碼:

注冊成功后登錄的效果:

如果登錄的時候密碼錯誤:

思維導圖

http://www.risenshineclean.com/news/37995.html

相關文章:

  • 怎樣獲得做網(wǎng)站的客戶信息發(fā)布平臺推廣有哪些
  • 濰坊仿站定制模板建站圖片外鏈上傳網(wǎng)站
  • 實名網(wǎng)站審核中心網(wǎng)站建設與網(wǎng)頁設計制作
  • 網(wǎng)站建設公司巨頭泰州seo推廣
  • 網(wǎng)站設計 app開發(fā)優(yōu)化關鍵詞排名公司
  • 網(wǎng)站制作論壇網(wǎng)站推廣怎么弄
  • 松山湖仿做網(wǎng)站關聯(lián)詞有哪些四年級
  • 中國建設銀行官網(wǎng)站代發(fā)工資濰坊關鍵詞優(yōu)化軟件
  • 中國建設銀行濟南招聘信息網(wǎng)站google搜索app下載
  • WordPress金融網(wǎng)站seo課程排行榜
  • 視頻網(wǎng)站如何做seo如何做電商賺錢
  • 四川省建設信息網(wǎng)站貴州seo學校
  • 南昌網(wǎng)站建設培訓班seo優(yōu)化基礎教程pdf
  • qq整人網(wǎng)站怎么做百度首頁百度一下
  • 新鄉(xiāng)營銷型網(wǎng)站建設產(chǎn)品營銷推廣策略
  • 百度站長怎么做網(wǎng)站維護二級域名查詢?nèi)肟?/a>
  • 一學一做看視頻網(wǎng)站網(wǎng)站推廣的渠道有哪些
  • 做網(wǎng)站頁面該建多大的畫布以圖搜圖百度識圖
  • 做網(wǎng)站用java還是c語言專業(yè)推廣引流團隊
  • 網(wǎng)站維護一般多久上海優(yōu)化外包
  • 法院文化建設網(wǎng)站女孩短期技能培訓班
  • 網(wǎng)站后臺管理系統(tǒng)制作教程長春網(wǎng)站優(yōu)化哪家好
  • 營銷型網(wǎng)站制作哪家好網(wǎng)絡營銷的特點
  • 網(wǎng)站建設方案及預算百度上做優(yōu)化一年多少錢
  • 湛江網(wǎng)站的建設網(wǎng)站關鍵詞優(yōu)化推廣哪家快
  • 網(wǎng)站中的qq客服怎么做班級優(yōu)化大師是干什么用的
  • 如何推廣運營網(wǎng)站百度付費推廣
  • 網(wǎng)站建設頭部代碼網(wǎng)站描述和關鍵詞怎么寫
  • 長沙私人做網(wǎng)站現(xiàn)在推廣平臺哪家最好
  • wordpress和emlog重慶seo和網(wǎng)絡推廣