登录页面设计,建立用户注册以及登录的数据库,数据库保存用户名和密码
(ps:本篇只完成了登录功能,其他功能,请见下篇嘿嘿。)
再次注册则失败:
代码如下:
头文件:
登录后聊天室界面(头文件):
#ifndef LT_JM_H
#define LT_JM_H
#include <QWidget>
namespace Ui {
class lt_jm;
}
class lt_jm : public QWidget
{
Q_OBJECT
public slots:
void jump_slot(); //接收跳转信号的槽函数
public:
explicit lt_jm(QWidget *parent = nullptr);
~lt_jm();
private:
Ui::lt_jm *ui;
};
#endif // LT_JM_H
注册头文件:
#ifndef ZC_JM_H
#define ZC_JM_H
#include <QWidget>
#include <QMessageBox>
#include <QSqlQuery>
namespace Ui {
class zc_jm;
}
class zc_jm : public QWidget
{
Q_OBJECT
public:
explicit zc_jm(QWidget *parent = nullptr);
~zc_jm();
public slots:
void jump_slot(); //接收跳转信号的槽函数
private slots:
void on_pushButton_clicked();
private:
Ui::zc_jm *ui;
};
#endif // ZC_JM_H
ui界面头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include "zc_jm.h"
#include "lt_jm.h"
#include <QWidget>
#include<QSqlDatabase> //数据库管理类
#include<QSqlQuery> //执行sql语句的类
#include<QSqlRecord> //数据库记录的类
#include<QMessageBox> //消息对话框
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
signals:
void jump(); //自定义跳转信号函数
void jump1();
private slots:
void on_dl_clicked();
void on_zc_clicked();
void on_tc_clicked();
private:
Ui::Widget *ui;
lt_jm *jm2; //定义另一个界面的指针
zc_jm *jm3; //定义另一个界面的指针
QSqlDatabase db; //定义一个数据库的类对象
};
#endif // WIDGET_H
功能文件:
聊天室功能函数:
#include "lt_jm.h"
#include "ui_lt_jm.h"
lt_jm::lt_jm(QWidget *parent) :
QWidget(parent),
ui(new Ui::lt_jm)
{
ui->setupUi(this);
}
lt_jm::~lt_jm()
{
delete ui;
}
void lt_jm::jump_slot()
{
this->show(); //将自己界面进行展示
}
注册功能函数:
#include "zc_jm.h"
#include "ui_zc_jm.h"
zc_jm::zc_jm(QWidget *parent) :
QWidget(parent),
ui(new Ui::zc_jm)
{
ui->setupUi(this);
this->setFixedSize(500,450); //设置固定尺寸
}
zc_jm::~zc_jm()
{
delete ui;
}
void zc_jm::jump_slot()
{
this->show(); //将自己界面进行展示
}
void zc_jm::on_pushButton_clicked()
{
//获取ui界面中要录入的数据
QString id = ui->lineEdit->text();
QString pwd = ui->lineEdit_2->text();
//要确保每个编辑器中都有数据
if(id.isEmpty() || pwd.isEmpty())
{
QMessageBox::information(this,"提示","请将信息填写完整");
return;
}
//准备sql语句
QString sql = QString("insert into user_pwd(ID,password) "
"values('%1','%2')").arg(id).arg(pwd);
//准备语句执行者
QSqlQuery querry;
if(!querry.exec(sql))
{
QMessageBox::information(this,"失败", "添加失败");
return;
}else
{
QMessageBox::information(this,"成功", "添加成功");
}
}
ui界面功能函数:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(500,450); //设置固定尺寸
this->setWindowTitle("My QQ"); //设置窗口标题
this->setWindowIcon(QIcon(":/tupian/OIP-C (1).jpg"));//设置窗口图标
this->setStyleSheet("background-color:skyblue;"); //设置样式表
this->setWindowOpacity(1); //设置窗口透明度
ui->dl->setIcon(QIcon(":/tupian/1.jpg"));//设置按钮图标
ui->zc->setIcon(QIcon(":/tupian/OIP-C (6).jpg"));
ui->tc->setIcon(QIcon(":/tupian/OIP-C (5).jpg"));
ui->dl->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
ui->zc->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
ui->tc->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
ui->pwd->setEchoMode(QLineEdit::Password); //设置回显模式
ui->logo->setPixmap(QPixmap(":/tupian/OIP-C (4).jpg")); //设置图片
ui->logo->setScaledContents(true); //设置内容自适应
ui->yhm_t->setPixmap(QPixmap(":/tupian/OIP-C.jpg"));
ui->yhm_t->setScaledContents(true);
ui->pwd_t->setPixmap(QPixmap(":/tupian/OIP-C (2).jpg"));
ui->pwd_t->setScaledContents(true);
if(!db.contains("mydatabase.db"))
{
db = QSqlDatabase::addDatabase("QSQLITE");//添加一个数据库,调用该类中的静态成员函数addDatabase
db.setDatabaseName("mydatabase.db");//设置数据库的名字
}
if(!db.open()) //打开数据库
{
QMessageBox::information(this,"失败","数据库打开失败");
return;
}
QString sql = "create table if not exists user_pwd(" //创建表
"ID varchar(16) primary key," //账号,主键
"password varchar(16))"; //密码
QSqlQuery querry; //准备语句执行者
if(!querry.exec(sql)) //让语句执行者执行sql语句
{
QMessageBox::information(this, "失败", "创建表失败");
return;
}
jm2 = new lt_jm; //给另一个界面实例化空间
connect(this,&Widget::jump,jm2,<_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
jm3 = new zc_jm; //给另一个界面实例化空间
connect(this,&Widget::jump1,jm3,&zc_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_dl_clicked()
{
QString sql = "select * from stu_info";
QSqlQuery querry;
if(!querry.exec(sql))//执行sql语句
{
QMessageBox::information(this,"提示","显示失败");
return;
}
int i = 0; //记录行数
while(querry.next())
{
//在该循环中,querry对象表示的是当前的记录
//可以使用成员函数: QSqlRecord record() const;获取当前记录
//可以使用QSqlRecord成员函数,count():获取当前记录中的项数
//可以使用QSqlRecord成员函数,value(index):获取当前记录中第index项的值
//遍历每条记录中的每一项的内容
for(int j=0; j<querry.record().count(); j++)
{
//ui->tableWidget->setItem(i,j, new QTableWidgetItem(querry.record().value(j).toString()));
}
i++; //继续遍历下一条记录
}
emit jump();
this->hide(); //将当前界面隐藏
}
void Widget::on_zc_clicked()
{
emit jump1();
this->hide(); //将当前界面隐藏
}
void Widget::on_tc_clicked()
{
}
测试文件:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}