widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include<QPushButton>
#include <QWidget>
#include <QDebug>
#include <QString>
#include <QMessageBox>
#include <QFile>
#include "client.h"
#include <QFileDialog>
#include <QSqlDatabase>
#include <QSqlQuery> //執(zhí)行sql
#include<QSqlRecord> //數(shù)據(jù)庫記錄的類
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
void jump(); //跳轉(zhuǎn)頁面的自定義函數(shù) 信號
public slots:
void login_solt(); //登錄頁面的自定義的槽函數(shù)
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_loginBtn_clicked();
void on_cancleBtn_clicked();
void on_registerBtn_clicked();
private:
Ui::Widget *ui;
client *s;
//定義一個數(shù)據(jù)庫的類對象
QSqlDatabase db;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
s = new client;
//更改窗口標(biāo)題
this->setWindowTitle("光與夜之戀");
this->setWindowFlag(Qt::FramelessWindowHint); //去掉窗口頭部
//logo圖
ui->logo->setPixmap(QPixmap(":/qt/a1.webp"));
ui->logo->setScaledContents(true);
// //用戶名密碼圖
// ui->userNamelab->setPixmap(QPixmap(":/qt/q1.webp"));
// ui->userNamelab->setScaledContents(true);
// ui->pwdlab->setPixmap(QPixmap(":/qt/2.webp"));
// ui->pwdlab->setScaledContents(true);
//設(shè)置賬戶密碼
ui->pwdEdit->setPlaceholderText("密碼");
ui->pwdEdit->setEchoMode(QLineEdit::Password);
//將登錄按鈕連接到自定義的槽函數(shù)中
connect(ui->loginBtn,&QPushButton::clicked,this,&Widget::login_solt);
//將取消按鈕連接到自定義的槽函數(shù)中
connect(ui->cancleBtn,SIGNAL(clicked()),this,SLOT(close()));
connect(this, &Widget::jump, s, &client::jump_slot);
//數(shù)據(jù)庫的操作
if(!db.contains("reginst.db"))
{
//添加數(shù)據(jù)庫
db=QSqlDatabase::addDatabase("QSQLITE");
//設(shè)置數(shù)據(jù)庫名字
db.setDatabaseName("reginst.db");
}
//打開數(shù)據(jù)庫
if(!db.open())
{
QMessageBox::information(this,"提示","數(shù)據(jù)庫打開失敗");
return ;
}
//準(zhǔn)備sql語句
QString sql="create table if not exists zh_info("
"username varchar(10) primary key,"
"pwd varchar(10))";
//準(zhǔn)備語句執(zhí)行者
QSqlQuery querry(db);
if(!querry.exec(sql))
{
QMessageBox::information(this,"失敗","數(shù)據(jù)庫創(chuàng)建失敗");
return;
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::login_solt()
{
QString username=ui->userNameEdit->text();
QString pwd=ui->pwdEdit->text();
}
void Widget::on_loginBtn_clicked()
{
QString username=ui->userNameEdit->text();
QString pwd=ui->pwdEdit->text();
//確保每個編輯器中有數(shù)據(jù)
if(username.isEmpty()||pwd.isEmpty())
{
QMessageBox::information(this,"提示","請將信息填充完整");
return ;
}
//準(zhǔn)備sql語句
QSqlQuery query;
QString sql = QString("SELECT username, pwd FROM zh_info WHERE username = '%1' AND pwd = '%2'")
.arg(username).arg(pwd);
//執(zhí)行查詢
if (query.exec(sql) && query.next())
{
int ret = QMessageBox::information(this, "提示", "登錄成功", QMessageBox::Ok);
if(ret == QMessageBox::Ok)
{
emit jump();
this->hide();
}
}
else
{
//登錄失敗
QMessageBox::information(this,"失敗","用戶名或密碼錯誤");
}
}
void Widget::on_registerBtn_clicked()
{
QString username = ui->userNameEdit->text();
QString pwd = ui->pwdEdit->text();
//確保每個編輯器中有數(shù)據(jù)
if (username.isEmpty() || pwd.isEmpty())
{
QMessageBox::information(this, "提示", "請將信息填充完整");
return;
}
//準(zhǔn)備sql查詢語句
QSqlQuery query;
QString sql = QString("select username from zh_info where username = '%1'").arg(username);
//執(zhí)行查詢
if (query.exec(sql) && query.next())
{
//已存在相同用戶名的記錄,無法注冊
QMessageBox::information(this, "失敗", "該用戶名已被注冊,請重新選擇用戶名");
}
else
{
//注冊
sql = QString("insert into zh_info(username, pwd) VALUES('%1', '%2')").arg(username).arg(pwd);
if (query.exec(sql))
{
QMessageBox::information(this, "成功", "注冊成功");
}
else
{
QMessageBox::information(this, "失敗", "注冊失敗");
}
}
}
void Widget::on_cancleBtn_clicked()
{
ui->pwdEdit->clear();
ui->userNameEdit->clear();
}
?client.h
#ifndef CLIENT_H
#define CLIENT_H
#include <QDockWidget>
#include <QDebug>
#include <QString>
#include <QMessageBox>
namespace Ui {
class client;
}
class client : public QDockWidget
{
Q_OBJECT
public slots:
void jump_slot();
public:
explicit client(QWidget *parent = nullptr);
~client();
private slots:
void on_pushButton_2_clicked();
private:
Ui::client *ui;
};
#endif // CLIENT_H
client.cpp
#include "client.h"
#include "ui_client.h"
client::client(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::client)
{
ui->setupUi(this);
//更改窗口標(biāo)題
this->setWindowTitle("光與夜之戀");
//logo圖
ui->logo->setPixmap(QPixmap(":/qt/592587c702e7f7674a6c7fa72fe21169.jpg"));
ui->logo->setScaledContents(true);
}
client::~client()
{
delete ui;
}
void client::jump_slot()
{
this->show();
}
void client::on_pushButton_2_clicked()
{
int ret =QMessageBox::information(this,"提示","該男人已經(jīng)溜走",QMessageBox::Ok);
if(ret==QMessageBox::Ok)
{
this->close();
}
}
?main函數(shù)
#include "widget.h"
#include <QApplication>
#include "client.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
// client s;
// QObject::connect(&w,&Widget::login_solt,&s,&client::jump_slot);
return a.exec();
}
窗口設(shè)計部分
最終效果圖:
文章來源:http://www.zghlxwxcb.cn/news/detail-731525.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-731525.html
到了這里,關(guān)于Qt 數(shù)據(jù)庫的注冊和登錄功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!