• Qt 数据库的注册和登录功能


    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include "client.h"
    10. #include
    11. #include
    12. #include //执行sql
    13. #include //数据库记录的类
    14. QT_BEGIN_NAMESPACE
    15. namespace Ui { class Widget; }
    16. QT_END_NAMESPACE
    17. class Widget : public QWidget
    18. {
    19. Q_OBJECT
    20. signals:
    21. void jump(); //跳转页面的自定义函数 信号
    22. public slots:
    23. void login_solt(); //登录页面的自定义的槽函数
    24. public:
    25. Widget(QWidget *parent = nullptr);
    26. ~Widget();
    27. private slots:
    28. void on_loginBtn_clicked();
    29. void on_cancleBtn_clicked();
    30. void on_registerBtn_clicked();
    31. private:
    32. Ui::Widget *ui;
    33. client *s;
    34. //定义一个数据库的类对象
    35. QSqlDatabase db;
    36. };
    37. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. s = new client;
    9. //更改窗口标题
    10. this->setWindowTitle("光与夜之恋");
    11. this->setWindowFlag(Qt::FramelessWindowHint); //去掉窗口头部
    12. //logo图
    13. ui->logo->setPixmap(QPixmap(":/qt/a1.webp"));
    14. ui->logo->setScaledContents(true);
    15. // //用户名密码图
    16. // ui->userNamelab->setPixmap(QPixmap(":/qt/q1.webp"));
    17. // ui->userNamelab->setScaledContents(true);
    18. // ui->pwdlab->setPixmap(QPixmap(":/qt/2.webp"));
    19. // ui->pwdlab->setScaledContents(true);
    20. //设置账户密码
    21. ui->pwdEdit->setPlaceholderText("密码");
    22. ui->pwdEdit->setEchoMode(QLineEdit::Password);
    23. //将登录按钮连接到自定义的槽函数中
    24. connect(ui->loginBtn,&QPushButton::clicked,this,&Widget::login_solt);
    25. //将取消按钮连接到自定义的槽函数中
    26. connect(ui->cancleBtn,SIGNAL(clicked()),this,SLOT(close()));
    27. connect(this, &Widget::jump, s, &client::jump_slot);
    28. //数据库的操作
    29. if(!db.contains("reginst.db"))
    30. {
    31. //添加数据库
    32. db=QSqlDatabase::addDatabase("QSQLITE");
    33. //设置数据库名字
    34. db.setDatabaseName("reginst.db");
    35. }
    36. //打开数据库
    37. if(!db.open())
    38. {
    39. QMessageBox::information(this,"提示","数据库打开失败");
    40. return ;
    41. }
    42. //准备sql语句
    43. QString sql="create table if not exists zh_info("
    44. "username varchar(10) primary key,"
    45. "pwd varchar(10))";
    46. //准备语句执行者
    47. QSqlQuery querry(db);
    48. if(!querry.exec(sql))
    49. {
    50. QMessageBox::information(this,"失败","数据库创建失败");
    51. return;
    52. }
    53. }
    54. Widget::~Widget()
    55. {
    56. delete ui;
    57. }
    58. void Widget::login_solt()
    59. {
    60. QString username=ui->userNameEdit->text();
    61. QString pwd=ui->pwdEdit->text();
    62. }
    63. void Widget::on_loginBtn_clicked()
    64. {
    65. QString username=ui->userNameEdit->text();
    66. QString pwd=ui->pwdEdit->text();
    67. //确保每个编辑器中有数据
    68. if(username.isEmpty()||pwd.isEmpty())
    69. {
    70. QMessageBox::information(this,"提示","请将信息填充完整");
    71. return ;
    72. }
    73. //准备sql语句
    74. QSqlQuery query;
    75. QString sql = QString("SELECT username, pwd FROM zh_info WHERE username = '%1' AND pwd = '%2'")
    76. .arg(username).arg(pwd);
    77. //执行查询
    78. if (query.exec(sql) && query.next())
    79. {
    80. int ret = QMessageBox::information(this, "提示", "登录成功", QMessageBox::Ok);
    81. if(ret == QMessageBox::Ok)
    82. {
    83. emit jump();
    84. this->hide();
    85. }
    86. }
    87. else
    88. {
    89. //登录失败
    90. QMessageBox::information(this,"失败","用户名或密码错误");
    91. }
    92. }
    93. void Widget::on_registerBtn_clicked()
    94. {
    95. QString username = ui->userNameEdit->text();
    96. QString pwd = ui->pwdEdit->text();
    97. //确保每个编辑器中有数据
    98. if (username.isEmpty() || pwd.isEmpty())
    99. {
    100. QMessageBox::information(this, "提示", "请将信息填充完整");
    101. return;
    102. }
    103. //准备sql查询语句
    104. QSqlQuery query;
    105. QString sql = QString("select username from zh_info where username = '%1'").arg(username);
    106. //执行查询
    107. if (query.exec(sql) && query.next())
    108. {
    109. //已存在相同用户名的记录,无法注册
    110. QMessageBox::information(this, "失败", "该用户名已被注册,请重新选择用户名");
    111. }
    112. else
    113. {
    114. //注册
    115. sql = QString("insert into zh_info(username, pwd) VALUES('%1', '%2')").arg(username).arg(pwd);
    116. if (query.exec(sql))
    117. {
    118. QMessageBox::information(this, "成功", "注册成功");
    119. }
    120. else
    121. {
    122. QMessageBox::information(this, "失败", "注册失败");
    123. }
    124. }
    125. }
    126. void Widget::on_cancleBtn_clicked()
    127. {
    128. ui->pwdEdit->clear();
    129. ui->userNameEdit->clear();
    130. }

     client.h

    1. #ifndef CLIENT_H
    2. #define CLIENT_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. namespace Ui {
    8. class client;
    9. }
    10. class client : public QDockWidget
    11. {
    12. Q_OBJECT
    13. public slots:
    14. void jump_slot();
    15. public:
    16. explicit client(QWidget *parent = nullptr);
    17. ~client();
    18. private slots:
    19. void on_pushButton_2_clicked();
    20. private:
    21. Ui::client *ui;
    22. };
    23. #endif // CLIENT_H

    client.cpp

    1. #include "client.h"
    2. #include "ui_client.h"
    3. client::client(QWidget *parent) :
    4. QDockWidget(parent),
    5. ui(new Ui::client)
    6. {
    7. ui->setupUi(this);
    8. //更改窗口标题
    9. this->setWindowTitle("光与夜之恋");
    10. //logo图
    11. ui->logo->setPixmap(QPixmap(":/qt/592587c702e7f7674a6c7fa72fe21169.jpg"));
    12. ui->logo->setScaledContents(true);
    13. }
    14. client::~client()
    15. {
    16. delete ui;
    17. }
    18. void client::jump_slot()
    19. {
    20. this->show();
    21. }
    22. void client::on_pushButton_2_clicked()
    23. {
    24. int ret =QMessageBox::information(this,"提示","该男人已经溜走",QMessageBox::Ok);
    25. if(ret==QMessageBox::Ok)
    26. {
    27. this->close();
    28. }
    29. }

     main函数

    1. #include "widget.h"
    2. #include
    3. #include "client.h"
    4. int main(int argc, char *argv[])
    5. {
    6. QApplication a(argc, argv);
    7. Widget w;
    8. w.show();
    9. // client s;
    10. // QObject::connect(&w,&Widget::login_solt,&s,&client::jump_slot);
    11. return a.exec();
    12. }

    窗口设计部分

    最终效果图:

  • 相关阅读:
    洛谷题单 【入门1】顺序结构
    Linux学习笔记
    2.10 XGBoost模型数学层面的理解(下篇)
    MOS管基本原理,单片机重要知识点
    阿里云消息队列 Kafka-消息检索实践
    游泳可以戴的耳机有哪些、推荐几款真正能戴着游泳的蓝牙耳机
    SpringBoot实例类-@Data
    【LeetCode】206. 反转链表—力扣
    Kubernets---配置 Pod 使用投射卷作存储
    矩阵与非齐次线性方程
  • 原文地址:https://blog.csdn.net/YSTXDY/article/details/133151938