• QTday3


    1. #include "widget.h"
    2. Widget::Widget(QWidget *parent)
    3. : QWidget(parent)
    4. {
    5. this->setFixedSize(600,450); //将窗口固定大小
    6. this->setWindowIcon(QIcon(":/wodepeizhenshi.png")); //设置窗口图标
    7. this->setWindowTitle("救命");
    8. QPushButton* btn1 = new QPushButton; //无惨构建一个按钮
    9. btn1->setParent(this); //将按钮绑定到窗口
    10. btn1->setText("登录"); //输入按钮文本
    11. QPushButton* btn2 = new QPushButton("取消",this); //创建第二个按钮并完成文本初始和绑定
    12. QPushButton* btn3 = new QPushButton("注册",this); //创建第三个按钮并完成文本初始和绑定
    13. btn1->resize(100,60); //设置第一个按钮的尺寸
    14. btn2->resize(btn1->size()); //设置第二个按钮的尺寸与第一个一样大小
    15. btn3->resize(btn1->size());
    16. btn1->move(80,370); //移动按钮
    17. btn2->move(370,370);
    18. btn3->move(220,370);
    19. btn1->setIcon(QIcon(":/login.png")); //向按钮中导入图片
    20. btn2->setIcon(QIcon(":/cancel.png"));
    21. QLabel* lab1 = new QLabel(this); //创建一个标签并绑定
    22. QLabel* lab2 = new QLabel(this);
    23. QLabel* lab3 = new QLabel(this);
    24. lab1->resize(50,50); //设置标签的大小
    25. lab2->resize(50,50);
    26. lab3->resize(600,250);
    27. lab1->setPixmap(QPixmap(":/userName.jpg")); //向标签中导入图片
    28. lab2->setPixmap(QPixmap(":/passwd.jpg"));
    29. lab3->setPixmap(QPixmap(":/9.jpg"));
    30. lab1->setScaledContents(true); //设置图片自适应
    31. lab2->setScaledContents(true);
    32. lab3->setScaledContents(true);
    33. lab1->move(100,255); //移动标签
    34. lab2->move(100,310);
    35. edit1 = new QLineEdit(this); //创建一个行编辑器
    36. edit2 = new QLineEdit(this);
    37. edit1->resize(260,50); //设置尺寸
    38. edit2->resize(260,50);
    39. edit1->setPlaceholderText("账号/手机号/米哈游通行证");//设置站位文本
    40. edit2->setEchoMode(QLineEdit::Password); //设置回显模式
    41. edit2->setMaxLength(6); //设置最多输入字符数
    42. edit1->move(lab1->x()+70,lab1->y()); //移动编辑器
    43. edit2->move(lab2->x()+70,lab2->y());
    44. s1 = new Form;
    45. connect(btn1,&QPushButton::clicked,this,&Widget::my_signals_dl);//将按钮1的点击信号和登录信号绑定
    46. connect(btn2,&QPushButton::clicked,this,&Widget::my_signals_qx);//将按钮2的点击信号和取消信号绑定
    47. connect(btn3,&QPushButton::clicked,this,&Widget::my_signals_zc);//将按钮3的点击信号和注册信号绑定
    48. connect(this,&Widget::my_signals_dl,this,&Widget::my_slot_dl);//将登陆信号和登录槽函数绑定
    49. connect(this,&Widget::my_signals_qx,this,&Widget::my_slot_qx);//将取消信号和登录槽函数绑定
    50. connect(this,&Widget::my_signals_zc,this,&Widget::my_slot_zc);//将注册信号和注册槽函数绑定
    51. connect(this,&Widget::my_signals_tz,s1,&Form::my_slot_tz);//将跳转信号和跳转槽函数绑定
    52. //判断自己的数据库对象中,是否包含了要处理的数据库,如果没有包含,则添加一个数据库,如果包含了,就可以打开了
    53. if(!db.contains("mydatabase.db"))
    54. {
    55. //添加一个数据库,调用该类中的静态成员函数
    56. //函数原型 static QSqlDatabase addDatabase(const QString& type)
    57. db=QSqlDatabase::addDatabase("QSQLITE");
    58. //设置数据库的名字
    59. db.setDatabaseName("mydatabase.db");
    60. }
    61. //此时已经有一个名为mydatabase.db的数据库
    62. //打开数据库
    63. if(!db.open())
    64. {
    65. QMessageBox::information(this,"失败","数据库打开失败");
    66. return;
    67. }
    68. //需要使用sql语句进行创建表的操作
    69. //准备sql语句
    70. QString sql="create table if not exists id (" //创建表
    71. "acc varchar(20) primary key," //账号,主键
    72. "pas varchar20)"; //密码
    73. //准备语句执行着
    74. QSqlQuery querry;
    75. //让语句执行者执行sql语句
    76. //返回值bool类型
    77. if(!querry.exec(sql))
    78. {
    79. QMessageBox::information(this,"失败","创建表失败");
    80. return;
    81. }
    82. }
    83. Widget::~Widget()
    84. {
    85. }
    86. void Widget::my_slot_zc() //注册的槽函数
    87. {
    88. QString acc=edit1->text(); //账号
    89. QString pas=edit2->text(); //密码
    90. //确保每个编辑器中都有数据
    91. if(acc.isEmpty()||pas.isEmpty())
    92. {
    93. QMessageBox::information(this,"提示","请将信息填写完整");
    94. return;
    95. }
    96. //准备sql语句
    97. QString sql=QString("insert into id(acc,pas)"
    98. "values('%1','%2')").arg(acc).arg(pas);
    99. //准备语句执行者
    100. QSqlQuery querry;
    101. if(!querry.exec(sql))
    102. {
    103. QMessageBox::information(this,"失败","注册失败");
    104. return ;
    105. }else
    106. {
    107. QMessageBox::information(this,"成功","注册成功");
    108. }
    109. }
    110. void Widget::my_slot_dl() //登录槽函数
    111. {
    112. if(edit1->text() == "admin" && edit2->text() == "123456")
    113. {
    114. QMessageBox box1(QMessageBox::Question,
    115. "提示框",
    116. "登录成功!",
    117. QMessageBox::Yes | QMessageBox::No,
    118. this);
    119. int ret = box1.exec();
    120. if(ret == QMessageBox::Yes)
    121. {
    122. emit my_signals_tz();
    123. this->hide();
    124. }
    125. else if(ret == QMessageBox::No)
    126. {
    127. emit my_signals_qx();
    128. }
    129. }
    130. else
    131. {
    132. int ret = QMessageBox::warning(this,
    133. "警告",
    134. "用户名或密码错误!",
    135. QMessageBox::Ok,
    136. QMessageBox::Ok);
    137. if(ret == QMessageBox::Ok);
    138. }
    139. }
    140. void Widget::my_slot_qx() //取消槽函数
    141. {
    142. int ret = QMessageBox::warning(this,
    143. "警告",
    144. "是否确认退出?",
    145. QMessageBox::Yes | QMessageBox::No,
    146. QMessageBox::No);
    147. if(ret == QMessageBox::Yes)
    148. {
    149. this->close();
    150. }
    151. }

    思维导图 

  • 相关阅读:
    前端开发工具vscode
    vue prop 父子组件访问
    将数组拆分成斐波那契序列
    【Linux系统化学习】进程优先级 | 进程饥饿 | 进程切换
    【爬虫】7.3. CSS位置偏移反爬案例分析与实战
    Jackson多态反序列化
    疫苗预约系统,疫苗预约管理系统,疫苗预约小程序系统设计与实现
    竞赛选题 深度学习实现语义分割算法系统 - 机器视觉
    Kfka监控工具--Kafka-eagle安装
    VMware 与戴尔正式“分手”
  • 原文地址:https://blog.csdn.net/weixin_52238362/article/details/133150644