• 9.25day5---Qt


    登录页面设计,建立用户注册以及登录的数据库,数据库保存用户名和密码

    (ps:本篇只完成了登录功能,其他功能,请见下篇)

     再次注册则失败:

    代码如下: 

    头文件:

    登录后聊天室界面(头文件):

    1. #ifndef LT_JM_H
    2. #define LT_JM_H
    3. #include
    4. namespace Ui {
    5. class lt_jm;
    6. }
    7. class lt_jm : public QWidget
    8. {
    9. Q_OBJECT
    10. public slots:
    11. void jump_slot(); //接收跳转信号的槽函数
    12. public:
    13. explicit lt_jm(QWidget *parent = nullptr);
    14. ~lt_jm();
    15. private:
    16. Ui::lt_jm *ui;
    17. };
    18. #endif // LT_JM_H

     注册头文件:

    1. #ifndef ZC_JM_H
    2. #define ZC_JM_H
    3. #include
    4. #include
    5. #include
    6. namespace Ui {
    7. class zc_jm;
    8. }
    9. class zc_jm : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. explicit zc_jm(QWidget *parent = nullptr);
    14. ~zc_jm();
    15. public slots:
    16. void jump_slot(); //接收跳转信号的槽函数
    17. private slots:
    18. void on_pushButton_clicked();
    19. private:
    20. Ui::zc_jm *ui;
    21. };
    22. #endif // ZC_JM_H

     ui界面头文件:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include "zc_jm.h"
    4. #include "lt_jm.h"
    5. #include
    6. #include //数据库管理类
    7. #include //执行sql语句的类
    8. #include //数据库记录的类
    9. #include //消息对话框
    10. QT_BEGIN_NAMESPACE
    11. namespace Ui { class Widget; }
    12. QT_END_NAMESPACE
    13. class Widget : public QWidget
    14. {
    15. Q_OBJECT
    16. public:
    17. Widget(QWidget *parent = nullptr);
    18. ~Widget();
    19. signals:
    20. void jump(); //自定义跳转信号函数
    21. void jump1();
    22. private slots:
    23. void on_dl_clicked();
    24. void on_zc_clicked();
    25. void on_tc_clicked();
    26. private:
    27. Ui::Widget *ui;
    28. lt_jm *jm2; //定义另一个界面的指针
    29. zc_jm *jm3; //定义另一个界面的指针
    30. QSqlDatabase db; //定义一个数据库的类对象
    31. };
    32. #endif // WIDGET_H

    功能文件:

    聊天室功能函数:

    1. #include "lt_jm.h"
    2. #include "ui_lt_jm.h"
    3. lt_jm::lt_jm(QWidget *parent) :
    4. QWidget(parent),
    5. ui(new Ui::lt_jm)
    6. {
    7. ui->setupUi(this);
    8. }
    9. lt_jm::~lt_jm()
    10. {
    11. delete ui;
    12. }
    13. void lt_jm::jump_slot()
    14. {
    15. this->show(); //将自己界面进行展示
    16. }

    注册功能函数:

    1. #include "zc_jm.h"
    2. #include "ui_zc_jm.h"
    3. zc_jm::zc_jm(QWidget *parent) :
    4. QWidget(parent),
    5. ui(new Ui::zc_jm)
    6. {
    7. ui->setupUi(this);
    8. this->setFixedSize(500,450); //设置固定尺寸
    9. }
    10. zc_jm::~zc_jm()
    11. {
    12. delete ui;
    13. }
    14. void zc_jm::jump_slot()
    15. {
    16. this->show(); //将自己界面进行展示
    17. }
    18. void zc_jm::on_pushButton_clicked()
    19. {
    20. //获取ui界面中要录入的数据
    21. QString id = ui->lineEdit->text();
    22. QString pwd = ui->lineEdit_2->text();
    23. //要确保每个编辑器中都有数据
    24. if(id.isEmpty() || pwd.isEmpty())
    25. {
    26. QMessageBox::information(this,"提示","请将信息填写完整");
    27. return;
    28. }
    29. //准备sql语句
    30. QString sql = QString("insert into user_pwd(ID,password) "
    31. "values('%1','%2')").arg(id).arg(pwd);
    32. //准备语句执行者
    33. QSqlQuery querry;
    34. if(!querry.exec(sql))
    35. {
    36. QMessageBox::information(this,"失败", "添加失败");
    37. return;
    38. }else
    39. {
    40. QMessageBox::information(this,"成功", "添加成功");
    41. }
    42. }

     ui界面功能函数:

    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. this->setFixedSize(500,450); //设置固定尺寸
    9. this->setWindowTitle("My QQ"); //设置窗口标题
    10. this->setWindowIcon(QIcon(":/tupian/OIP-C (1).jpg"));//设置窗口图标
    11. this->setStyleSheet("background-color:skyblue;"); //设置样式表
    12. this->setWindowOpacity(1); //设置窗口透明度
    13. ui->dl->setIcon(QIcon(":/tupian/1.jpg"));//设置按钮图标
    14. ui->zc->setIcon(QIcon(":/tupian/OIP-C (6).jpg"));
    15. ui->tc->setIcon(QIcon(":/tupian/OIP-C (5).jpg"));
    16. ui->dl->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
    17. ui->zc->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
    18. ui->tc->setStyleSheet("background-color:white; border-radius:10px;"); //设置样式表
    19. ui->pwd->setEchoMode(QLineEdit::Password); //设置回显模式
    20. ui->logo->setPixmap(QPixmap(":/tupian/OIP-C (4).jpg")); //设置图片
    21. ui->logo->setScaledContents(true); //设置内容自适应
    22. ui->yhm_t->setPixmap(QPixmap(":/tupian/OIP-C.jpg"));
    23. ui->yhm_t->setScaledContents(true);
    24. ui->pwd_t->setPixmap(QPixmap(":/tupian/OIP-C (2).jpg"));
    25. ui->pwd_t->setScaledContents(true);
    26. if(!db.contains("mydatabase.db"))
    27. {
    28. db = QSqlDatabase::addDatabase("QSQLITE");//添加一个数据库,调用该类中的静态成员函数addDatabase
    29. db.setDatabaseName("mydatabase.db");//设置数据库的名字
    30. }
    31. if(!db.open()) //打开数据库
    32. {
    33. QMessageBox::information(this,"失败","数据库打开失败");
    34. return;
    35. }
    36. QString sql = "create table if not exists user_pwd(" //创建表
    37. "ID varchar(16) primary key," //账号,主键
    38. "password varchar(16))"; //密码
    39. QSqlQuery querry; //准备语句执行者
    40. if(!querry.exec(sql)) //让语句执行者执行sql语句
    41. {
    42. QMessageBox::information(this, "失败", "创建表失败");
    43. return;
    44. }
    45. jm2 = new lt_jm; //给另一个界面实例化空间
    46. connect(this,&Widget::jump,jm2,<_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
    47. jm3 = new zc_jm; //给另一个界面实例化空间
    48. connect(this,&Widget::jump1,jm3,&zc_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
    49. }
    50. Widget::~Widget()
    51. {
    52. delete ui;
    53. }
    54. void Widget::on_dl_clicked()
    55. {
    56. QString sql = "select * from stu_info";
    57. QSqlQuery querry;
    58. if(!querry.exec(sql))//执行sql语句
    59. {
    60. QMessageBox::information(this,"提示","显示失败");
    61. return;
    62. }
    63. int i = 0; //记录行数
    64. while(querry.next())
    65. {
    66. //在该循环中,querry对象表示的是当前的记录
    67. //可以使用成员函数: QSqlRecord record() const;获取当前记录
    68. //可以使用QSqlRecord成员函数,count():获取当前记录中的项数
    69. //可以使用QSqlRecord成员函数,value(index):获取当前记录中第index项的值
    70. //遍历每条记录中的每一项的内容
    71. for(int j=0; jrecord().count(); j++)
    72. {
    73. //ui->tableWidget->setItem(i,j, new QTableWidgetItem(querry.record().value(j).toString()));
    74. }
    75. i++; //继续遍历下一条记录
    76. }
    77. emit jump();
    78. this->hide(); //将当前界面隐藏
    79. }
    80. void Widget::on_zc_clicked()
    81. {
    82. emit jump1();
    83. this->hide(); //将当前界面隐藏
    84. }
    85. void Widget::on_tc_clicked()
    86. {
    87. }

    测试文件:

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w;
    7. w.show();
    8. return a.exec();
    9. }

  • 相关阅读:
    JavaWeb整体介绍
    消息中间件之ActiveMQ的基本使用
    Zookeeper: 配置参数解读
    掌握互联网的未来:5G时代的新机遇
    array_map与array_walk的用法与区别详解
    PCL_点云分割_基于法线微分分割
    希尔排序算法(思路分析) [数据结构][Java]
    第三话、程序员第一家公司有多重要
    2.8 二叉平衡树
    C语言:操作符详解(2)
  • 原文地址:https://blog.csdn.net/yjh666jhy/article/details/133149578