• 23062QTday5


    完成登录界面的注册功能

    头文件

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

    源文件:

    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. //设置固定尺寸
    9. this->setFixedSize(640,480);
    10. //给程序框重命名并添加图片
    11. this->setWindowTitle("Widget");
    12. this->setWindowIcon(QIcon(":/C:/Users/LENOVO/Desktop/icon/wodepeizhenshi.png"));
    13. //设置登录按钮
    14. btn1=new QPushButton(QIcon(":/C:/Users/LENOVO/Desktop/icon/login.png"),"登录",this);
    15. btn1->setParent(this);
    16. btn1->resize(100,50);
    17. btn1->move(220,400);
    18. //设置注册按钮
    19. btn3=new QPushButton("注册",this);
    20. btn3->setParent(this);
    21. btn3->resize(100,50);
    22. btn3->move(btn1->x()-120,btn1->y());
    23. //设置取消按钮
    24. btn2=new QPushButton(QIcon(":/C:/Users/LENOVO/Desktop/icon/cancel.png"),"取消",this);
    25. btn2->setParent(this);
    26. btn2->resize(btn1->size());
    27. btn2->move(btn1->x()+120,btn1->y());
    28. //添加账号图片
    29. QLabel *lab1=new QLabel(this);
    30. lab1->setPixmap(QPixmap(":/C:/Users/LENOVO/Desktop/icon/userName.jpg"));
    31. lab1->setScaledContents(true);
    32. lab1->resize(50,50);
    33. lab1->move(80,250);
    34. //添加密码图片
    35. QLabel *lab2=new QLabel(this);
    36. lab2->setPixmap(QPixmap(":/C:/Users/LENOVO/Desktop/icon/passwd.jpg"));
    37. lab2->setScaledContents(true);
    38. lab2->resize(50,50);
    39. lab2->move(lab1->x(),lab1->y()+60);
    40. //添加账号文本框
    41. edit1=new QLineEdit(this);
    42. edit1->resize(400,50);
    43. edit1->move(lab1->x()+60,lab1->y());
    44. edit1->setMaxLength(11);
    45. edit1->setPlaceholderText("账号/手机/邮箱");
    46. //添加密码文本框
    47. edit2=new QLineEdit(this);
    48. edit2->resize(400,50);
    49. edit2->move(lab2->x()+60,lab2->y());
    50. edit2->setEchoMode(QLineEdit::Password);
    51. edit2->setMaxLength(11);
    52. //添加顶层图片
    53. QLabel* lab3=new QLabel(this);
    54. lab3->setPixmap(QPixmap(":/C:/Users/LENOVO/Desktop/icon/logo.png"));
    55. lab3->setScaledContents(true);
    56. lab3->resize(640,220);
    57. //判断自己的数据库对象中,是否包含了要处理的数据库,如果没有包含则添加一个数据库,如果包含了,就可以打开了
    58. if(!db.contains("mydata.db"))
    59. {
    60. db = QSqlDatabase::addDatabase("QSQLITE");
    61. //设置数据库的名字
    62. db.setDatabaseName("mydata.db");
    63. }
    64. //此时已经有一个名为mydata.db的数据库
    65. //打开数据库
    66. if(!db.open())
    67. {
    68. QMessageBox::information(this,"失败","数据库打开失败");
    69. return;
    70. }
    71. //需要使用sql语句进行创建表的操作
    72. //准备sql语句
    73. QString sql = "create table if not exists user_reg(" //创建表
    74. "user varchar(10) primary key," //用户
    75. "key varchar(10))"; //密码
    76. //准备语句执行者
    77. QSqlQuery querry;
    78. if(!querry.exec(sql))
    79. {
    80. QMessageBox::information(this, "失败", "创建表失败");
    81. return;
    82. }
    83. //判断账户密码
    84. connect(btn1, &QPushButton::clicked, this, &Widget::btn1_clicked);
    85. connect(btn2, &QPushButton::clicked, this, &Widget::btn2_clicked);
    86. connect(btn3, &QPushButton::clicked, this, &Widget::btn3_clicked);
    87. }
    88. Widget::~Widget()
    89. {
    90. delete ui;
    91. }
    92. //注册槽函数
    93. void Widget::btn3_clicked()
    94. {
    95. //获取ui界面中要录入的数据
    96. QString user =edit1->text();
    97. QString key = edit2->text();
    98. //要确保每个编辑器中都有数据
    99. if(user.isEmpty() || key.isEmpty())
    100. {
    101. QMessageBox::information(this,"提示","请将信息填写完整");
    102. return;
    103. }
    104. //准备sql语句
    105. QString sql = QString("insert into user_reg(user,key) "
    106. "values('%1', '%2')").arg(user).arg(key);
    107. //准备语句执行者
    108. QSqlQuery querry;
    109. if(!querry.exec(sql))
    110. {
    111. QMessageBox::information(this,"失败", "添加失败");
    112. return;
    113. }else
    114. {
    115. QMessageBox::information(this,"成功", "添加成功");
    116. }
    117. }
    118. //登录槽函数
    119. void Widget::btn1_clicked()
    120. {
    121. //获取ui界面中要登录的数据
    122. QString user =edit1->text();
    123. QString key = edit2->text();
    124. int flag=0;
    125. //准备sql语句
    126. QString sql = QString("select * from user_reg where user=='%1' and key=='%2';").arg(user).arg(key);
    127. //准备语句执行者
    128. QSqlQuery querry;
    129. querry.exec(sql);
    130. while(querry.next())
    131. {
    132. flag=1;
    133. }
    134. if(!flag)
    135. {
    136. QMessageBox box(QMessageBox::Critical,
    137. "出错",
    138. "账号密码不匹配,是否重新登录",
    139. QMessageBox::Ok | QMessageBox::Cancel,
    140. this);
    141. int ret=box.exec();
    142. if(ret==QMessageBox::Ok)
    143. {
    144. edit2->clear();
    145. }else
    146. {
    147. this->close();
    148. }
    149. }
    150. else
    151. {
    152. //信息对话框
    153. QMessageBox box(QMessageBox::Information,
    154. "信息对话框",
    155. "登录成功",
    156. QMessageBox::Yes,
    157. this);
    158. box.setButtonText(QMessageBox::Yes,"ok");
    159. int ret=box.exec();
    160. if(ret==QMessageBox::Yes)
    161. {
    162. this->close();
    163. }
    164. }
    165. }
    166. //取消槽函数
    167. void Widget::btn2_clicked()
    168. {
    169. QMessageBox box(QMessageBox::Question,
    170. "问题对话框",
    171. "是否确定要退出登录",
    172. QMessageBox::Yes | QMessageBox::No,
    173. this);
    174. int ret=box.exec();
    175. if(ret==QMessageBox::Yes)
    176. {
    177. this->close();
    178. }
    179. }

    测试文件

    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. }

  • 相关阅读:
    MySQL面试题
    亚信安全勒索治理「方舟」正式上线, 勒索体检中心全面开放
    删除 Windows 设备和驱动器中的 WPS网盘、百度网盘等快捷图标
    ppocr ERROR: When parsing line KeyError: None
    2023年Q3企业邮箱安全性报告:境内钓鱼邮件超过境外攻击
    定时器的编码器接口
    SSM学习43:SpringMVC不扫描某些bean
    基于虚幻引擎的AI训练合成数据生成
    RSA加密算法Python实现
    Android内核模块编译
  • 原文地址:https://blog.csdn.net/cwj442257772/article/details/133148395