• day49:QT day2,信号与槽、对话框


    一、完善登录框

    点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。

    如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面

    点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录

    要求:消息对话框,对象版和静态成员函数版至少各实现一个

    第二个界面,second.h:

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

    第二个界面,second.cpp:

    1. #include "second.h"
    2. #include "ui_second.h"
    3. Second::Second(QWidget *parent) :
    4. QWidget(parent),
    5. ui(new Ui::Second)
    6. {
    7. ui->setupUi(this);
    8. }
    9. Second::~Second()
    10. {
    11. delete ui;
    12. }
    13. void Second::jump_slot()
    14. {
    15. //如果接收到信号,弹出消息框
    16. this->show();
    17. }

    widget.h:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include "second.h"
    9. class Widget : public QWidget
    10. {
    11. Q_OBJECT
    12. private:
    13. QLabel *lab1; //背景
    14. QLabel *lab2; //用户图标
    15. QLabel *lab3; //密码图标
    16. QLineEdit *edit1; //用户名/手机/邮箱
    17. QLineEdit *edit2; //密码
    18. QPushButton *btn1; //登录
    19. QPushButton *btn2; //退出
    20. QMessageBox errbox; //错误对话框定义
    21. Second* s1; //第二个界面定义
    22. signals:
    23. void jump(); //发送信号与第二个界面second槽反应
    24. public slots:
    25. void login_slot(); //登录按钮点击事件接收槽
    26. void cancel_slot(); //取消按钮点击事件接受槽
    27. public:
    28. Widget(QWidget *parent = nullptr);
    29. ~Widget();
    30. };
    31. #endif // WIDGET_H

    widget.cpp:

    1. #include "widget.h"
    2. Widget::Widget(QWidget *parent)
    3. : QWidget(parent)
    4. {
    5. this->setFixedSize(500,500);
    6. this->setWindowTitle("hqyj login...");
    7. this->setWindowIcon(QIcon("D:\\qianrushi\\icon\\wodepeizhenshi.png"));
    8. //实例化一个标签,给定初始文本内容并指定父组件
    9. lab1=new QLabel(this);
    10. lab1->resize(500,200);
    11. lab1->move(0,0);
    12. lab1->setPixmap(QPixmap("D:\\qianrushi\\icon\\logo.png"));
    13. lab1->setScaledContents(true);
    14. //lab1->setGeometry(0,0,500,200);
    15. lab2=new QLabel(this);
    16. lab2->resize(30,30);
    17. lab2->move(80,250);
    18. lab2->setPixmap(QPixmap("D:\\qianrushi\\icon\\userName.jpg"));
    19. lab2->setScaledContents(true);
    20. edit1=new QLineEdit(this);
    21. edit1->setGeometry(lab2->x()+50,lab2->y()-10,300,50);
    22. edit1->setPlaceholderText("hqyj账号/手机/邮箱");
    23. lab3=new QLabel(this);
    24. lab3->setPixmap(QPixmap("D:\\qianrushi\\icon\\passwd.jpg"));
    25. lab3->setGeometry(lab2->x(),lab2->y()+50,30,30);
    26. lab3->setScaledContents(true);
    27. edit2=new QLineEdit(this);
    28. edit2->setGeometry(lab3->x()+50,lab3->y()-10,300,50);
    29. edit2->setPlaceholderText("密码");
    30. edit2->setEchoMode(QLineEdit::Password);
    31. btn1=new QPushButton(QIcon("D:\\qianrushi\\icon\\login.png"),"登录",this);
    32. btn1->resize(100,40);
    33. btn1->move(lab3->x()+100,lab3->y()+80);
    34. btn2=new QPushButton(QIcon("D:\\qianrushi\\icon\\cancel.png"),"退出",this);
    35. btn2->resize(100,40);
    36. btn2->move(btn1->x()+150,btn1->y());
    37. //给第二个界面申请空间
    38. s1 = new Second;
    39. //连接弹窗的信号与槽
    40. connect(this,&Widget::jump,s1,&Second::jump_slot);
    41. //连接登录的信号与槽
    42. connect(btn1,&QPushButton::clicked,this,&Widget::login_slot);
    43. //连接取消的信号与槽
    44. connect(btn2,&QPushButton::clicked,this,&Widget::cancel_slot);
    45. }
    46. Widget::~Widget()
    47. {
    48. }
    49. void Widget::login_slot()
    50. {
    51. if(edit1->text()!="admin" || edit2->text()!="123456")
    52. {
    53. //登录失败,弹出错误对话框
    54. errbox.setText("账号密码不匹配,是否重新登录");
    55. errbox.setWindowTitle("错误对话框");
    56. errbox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
    57. errbox.setDefaultButton(QMessageBox::Yes);
    58. int ret1=errbox.exec();
    59. if(ret1==QMessageBox::Yes)
    60. {
    61. //同意,隐藏错误对话框,清空账号密码
    62. errbox.hide();
    63. edit1->clear();
    64. edit2->clear();
    65. }else if(ret1==QMessageBox::Cancel)
    66. {
    67. //取消,关闭错误对话框
    68. errbox.close();
    69. }
    70. }else{
    71. int ret2=QMessageBox::information(this,"信息对话框","登录成功",QMessageBox::Ok,QMessageBox::Ok);
    72. if(ret2 == QMessageBox::Ok)
    73. {
    74. //同意登录,跳转
    75. this->close();
    76. emit jump();
    77. }
    78. }
    79. }
    80. void Widget::cancel_slot()
    81. {
    82. QMessageBox quesbox(QMessageBox::Question,
    83. "问题对话框",
    84. "确定退出?",
    85. QMessageBox::Yes|QMessageBox::No,
    86. this);
    87. //取消,弹出问题对话框
    88. int ret3=quesbox.exec();
    89. if(ret3 == QMessageBox::Yes)
    90. {
    91. //同意退出,退出程序
    92. quesbox.close();
    93. this->close();
    94. }else if(ret3 == QMessageBox::No)
    95. {
    96. //取消,继续登录
    97. quesbox.hide();
    98. }
    99. }

    main.cpp:

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

    二、思维导图:有道云笔记

  • 相关阅读:
    13.Ansible.roles案例
    php实战案例记录(2)生成包含字母和数字但不重复的用户名
    kafka安装步骤以及初步入门
    RHCSA 重定向、vim练习题
    顺序表的实现
    智能音箱语音交互系统简介与测试初探
    线上mysql死锁排查分析---索引index merge导致死锁
    基于关联规则的多样化推荐技术应用研究
    运维面试宝典
    深入解析CSS选择器:更多细节和应用
  • 原文地址:https://blog.csdn.net/wxmchong/article/details/132995963