• Qt day5


    注册功能:

    widget.h:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include //数据库管理类
    10. #include //执行sql语句的类
    11. #include //数据库记录的类
    12. QT_BEGIN_NAMESPACE
    13. namespace Ui {class Widget;}
    14. QT_END_NAMESPACE
    15. class Widget : public QWidget
    16. {
    17. Q_OBJECT
    18. public:
    19. Widget(QWidget *parent = nullptr);
    20. ~Widget();
    21. signals:
    22. void btn1_signal();
    23. public slots:
    24. void btn1_slot();
    25. void btn2_slot();
    26. void btn3_clicked();
    27. private:
    28. Ui::Widget *ui;
    29. QPushButton *btn1;
    30. QPushButton *btn2;
    31. QPushButton *btn3;
    32. QLineEdit *edit1;
    33. QLineEdit *edit2;
    34. QLabel *lab1;
    35. QLabel *lab2;
    36. QLabel *lab3;
    37. QSqlDatabase db;
    38. };
    39. #endif // WIDGET_H

     

    widget.cpp:

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include
    4. #include
    5. Widget::Widget(QWidget *parent)
    6. : QWidget(parent)
    7. ,ui(new Ui::Widget)
    8. {
    9. ui->setupUi(this);
    10. //判断自己的数据库对象中,是否包含了要处理的数据库,如果没有包含则添加一个数据库,如果包含了,就可以打开了
    11. if(!db.contains("mydatabase.db"))
    12. {
    13. db = QSqlDatabase::addDatabase("QSQLITE");
    14. //设置数据库的名字
    15. db.setDatabaseName("mydatabase.db");
    16. }
    17. //此时已经有一个名为mydatabase.db的数据库
    18. //打开数据库
    19. if(!db.open())
    20. {
    21. QMessageBox::information(this,"失败","数据库打开失败");
    22. return;
    23. }
    24. //需要使用sql语句进行创建表的操作
    25. //准备sql语句
    26. QString sql = "create table if not exists usr(" //创建表
    27. "usrname varchar(10) primary key,"
    28. "password varchar(10))";
    29. //准备语句执行者
    30. QSqlQuery querry;
    31. if(!querry.exec(sql))
    32. {
    33. QMessageBox::information(this, "失败", "创建表失败");
    34. return;
    35. }
    36. //将图形化界面的名字改成登录界面
    37. this->setWindowTitle("LOL");
    38. //将图标改成自定义图片内容
    39. this->setWindowIcon(QIcon(":/userName.jpg"));
    40. //设置ui界面的大小为合适的大小
    41. this->setFixedSize(QSize(400,300));
    42. //插入一个图标
    43. lab1 = new QLabel(this);
    44. lab1->resize(QSize(400,135));
    45. lab1->move(0,0);
    46. //内容要是一张图片
    47. lab1->setPixmap(QPixmap(":/bizhi.png"));
    48. //设置图片填充
    49. lab1->setScaledContents(true);
    50. //插入两个行编辑器
    51. edit1 = new QLineEdit(this);
    52. edit1->resize(QSize(240,40));
    53. edit1->move(110,150);
    54. edit1->setPlaceholderText("账号");
    55. //输入密码
    56. edit2 = new QLineEdit(this);
    57. edit2->resize(QSize(240,40));
    58. edit2->move(edit1->x(),edit1->y()+55);
    59. edit2->setPlaceholderText("密码");
    60. //回显模式是密码模式
    61. edit2->setEchoMode(QLineEdit::Password);
    62. lab2 = new QLabel(this);
    63. lab2->resize(50,40);
    64. lab2->setPixmap(QPixmap(":/userName.jpg"));
    65. lab2->setScaledContents(true);
    66. lab2->move(edit1->x()-60,edit1->y());
    67. lab3 = new QLabel(this);
    68. lab3->resize(50,40);
    69. lab3->setPixmap(QPixmap(":/passwd.jpg"));
    70. lab3->setScaledContents(true);
    71. lab3->move(edit2->x()-60,edit2->y());
    72. //两个按钮
    73. QPushButton *btn1 = new QPushButton("登录",this);
    74. QPushButton *btn2 = new QPushButton("取消",this);
    75. QPushButton *btn3 = new QPushButton("注册",this);
    76. //重设尺寸
    77. btn1->resize(QSize(60,30));
    78. btn2->resize(btn1->size());
    79. btn3->resize(btn1->size());
    80. //移动位置
    81. btn1->move(120,edit2->y()+55);
    82. btn2->move(btn1->x()+80,edit2->y()+55);
    83. btn3->move(btn1->x()+160,edit2->y()+55);
    84. btn1->setIcon(QIcon(":/login.png"));
    85. btn2->setIcon(QIcon(":/cancel.png"));
    86. btn3->setIcon(QIcon(":/mima.png"));
    87. //将两个按钮连到自己定义的槽函数中
    88. connect(btn1,&QPushButton::clicked,this,&Widget::btn1_slot);
    89. connect(btn2,&QPushButton::clicked,this,&Widget::btn2_slot);
    90. connect(btn3,&QPushButton::clicked,this,&Widget::btn3_clicked);
    91. // connect(this, &Widget::btn1_signal,s1,&Second::jump_slot1);
    92. }
    93. void Widget::btn1_slot(){
    94. //获取ui界面中要登录的数据
    95. QString user =edit1->text();
    96. QString key = edit2->text();
    97. int flag=0;
    98. //准备sql语句
    99. QString sql = QString("select * from usr where usrname=='%1' and password=='%2';").arg(user).arg(key);
    100. //准备语句执行者
    101. QSqlQuery querry;
    102. querry.exec(sql);
    103. while(querry.next())
    104. {
    105. flag=1;
    106. }
    107. if(!flag)
    108. {
    109. QMessageBox box(QMessageBox::Critical,
    110. "出错",
    111. "账号密码不匹配,是否重新登录",
    112. QMessageBox::Ok | QMessageBox::Cancel,
    113. this);
    114. int ret=box.exec();
    115. if(ret==QMessageBox::Ok)
    116. {
    117. edit2->clear();
    118. }else
    119. {
    120. this->close();
    121. }
    122. }
    123. else
    124. {
    125. //信息对话框
    126. QMessageBox box(QMessageBox::Information,
    127. "信息对话框",
    128. "登录成功",
    129. QMessageBox::Yes,
    130. this);
    131. box.setButtonText(QMessageBox::Yes,"ok");
    132. int ret=box.exec();
    133. if(ret==QMessageBox::Yes)
    134. {
    135. this->close();
    136. }
    137. }
    138. }
    139. void Widget::btn2_slot(){
    140. int ret =QMessageBox::warning(
    141. this,
    142. "LOL",
    143. "是否退出?",
    144. QMessageBox::Yes|QMessageBox::No,
    145. QMessageBox::Yes);
    146. if(ret == QMessageBox::No){
    147. this->close();
    148. }
    149. }
    150. void Widget::btn3_clicked(){
    151. //获取ui界面中要录入的数据
    152. QString usr = edit1->text();
    153. QString pass = edit2->text();
    154. //要确保每个编辑器中都有数据
    155. if(usr.isEmpty() || pass.isEmpty())
    156. {
    157. QMessageBox::information(this,"提示","请将信息填写完整");
    158. return;
    159. }
    160. //准备sql语句
    161. QString sql = QString("insert into usr(usrname,password) "
    162. "values('%1', '%2')").arg(usr).arg(pass);
    163. //qDebug()<
    164. //准备语句执行者
    165. QSqlQuery querry;
    166. if(!querry.exec(sql))
    167. {
    168. QMessageBox::information(this,"失败", "添加失败");
    169. return;
    170. }else
    171. {
    172. QMessageBox::information(this,"成功", "添加成功");
    173. }
    174. }
    175. Widget::~Widget()
    176. {
    177. }

  • 相关阅读:
    深度学习 - 46.DIN 深度兴趣网络
    美国政府首席信息安全官详细介绍零信任战略竞赛
    面试必知的9个性能测试指标,你完全了解吗?
    【wiki知识库】09.欢迎页面展示(浏览量统计)SpringBoot部分
    5秒盾,加速乐
    ROS service简单使用示例
    Webpack最佳实践
    WinApp自动化测试之工具的选择
    基于SpringBoot网上超市的设计与实现【附万字文档(LW)和搭建文档】
    uniapp实现公众号微信登录
  • 原文地址:https://blog.csdn.net/2301_77665369/article/details/133149561