• C++&QT day9


    完善登录框

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

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

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

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

    widget.cpp

    1. #include "widget.h"
    2. widget::widget(QWidget *parent)
    3. : QWidget(parent)
    4. {
    5. s1=new Second;
    6. connect(this,&widget::jump,s1,&Second::jump_slot);
    7. this->setFixedSize(550,400);//设置固定尺寸
    8. this->setWindowTitle("Widget");//设置窗口标题
    9. this->setWindowIcon(QIcon("D:\\icon\\wodepeizhenshi.png"));//设置窗口图标
    10. //实例化一个标签
    11. QLabel *lab1 = new QLabel;
    12. lab1->setParent(this);
    13. lab1->resize(550,215);//重新设置尺寸
    14. //lab1->setAlignment(Qt::AlignCenter);//文本对齐
    15. lab1->setPixmap(QPixmap("D:\\icon\\logo.png"));
    16. lab1->setScaledContents(true);//设置内容自适应
    17. QLabel *lab3 = new QLabel;
    18. lab3->setParent(this);//指定父组件
    19. lab3->resize(40,40);//重新设置尺寸
    20. lab3->move(100,220);
    21. //lab3->setAlignment(Qt::AlignCenter);
    22. lab3->setPixmap(QPixmap("D:\\icon\\userName.jpg"));
    23. lab3->setScaledContents(true);//设置内容自适应
    24. QLabel *lab2 = new QLabel;
    25. lab2->setParent(this);
    26. lab2->resize(40,40);//重新设置尺寸
    27. lab2->move(100,270);
    28. lab2->setPixmap(QPixmap("D:\\icon\\passwd.jpg"));
    29. lab2->setScaledContents(true);//设置内容自适应
    30. // 实例化一个行编辑器
    31. edit2 = new QLineEdit(this);
    32. edit2->resize(250,40);
    33. edit2->move(lab3->x()+50,lab3->y());
    34. // 实例化一个行编辑器
    35. edit1 = new QLineEdit(this);
    36. edit1->resize(250,40);
    37. edit1->move(lab2->x()+50,lab2->y());
    38. edit1->setEchoMode(QLineEdit::Password);//设置回显模式
    39. //实例化一个按钮并给定图标,文本内容,父组件
    40. btn1 = new QPushButton(QIcon("D:\\icon\\login.png"), "登录", this);
    41. btn1->resize(100,50);//设置按钮大小
    42. btn1->move(150,325);//设置按钮移动位置
    43. connect(this->btn1,&QPushButton::clicked,this,&widget::my_slot);
    44. btn2 = new QPushButton(QIcon("D:\\icon\\cancel.png"),"取消", this);
    45. btn2->resize(btn1->size());
    46. btn2->move(btn1->x()+150,btn1->y());
    47. connect(this->btn2,&QPushButton::clicked,this,&widget::on_btn2_clicked);
    48. }
    49. void widget::my_slot()
    50. {
    51. if(edit2->text().trimmed()==tr("admin") && edit1->text().trimmed()==tr("123456"))
    52. {
    53. //1、调用构造函数实例化对象
    54. QMessageBox box(QMessageBox::Information,//图标
    55. "信息对话框",//对话框标题
    56. "登录成功",//对话框文本内容
    57. QMessageBox::Ok,//提供的按钮
    58. this);//父组件
    59. box.setDefaultButton(QMessageBox::Ok);//将OK设置为默认按钮
    60. //2、调用exec函数运行对话框
    61. int ret=box.exec();
    62. //3、对结果进行判断
    63. if(ret==QMessageBox::Ok)
    64. {
    65. emit jump();
    66. this->hide();
    67. }
    68. }
    69. else if(edit2->text()!="admin" && edit1->text()!="123456")
    70. {
    71. //直接调用静态成员函数完成对话框的实现
    72. int num=QMessageBox::critical(this,//父组件
    73. "错误对话框",//对话框标题
    74. "账号密码不匹配,是否重新登录",//文本内容
    75. QMessageBox::Ok|QMessageBox::Cancel,//对话框提供的按钮
    76. QMessageBox::Ok);//默认选中按钮
    77. //对用户选中的按钮进行判断
    78. if(num==QMessageBox::Ok)
    79. {
    80. edit2->clear();
    81. edit1->clear();
    82. }
    83. else if(num==QMessageBox::Cancel)
    84. {
    85. close();
    86. }
    87. }
    88. }
    89. void widget::on_btn1_clicked()
    90. {
    91. emit jump();
    92. this->hide();
    93. }
    94. void widget::on_btn2_clicked()
    95. {
    96. //1、调用构造函数实例化对象
    97. QMessageBox box(QMessageBox::Question,//图标
    98. "问题对话框",//对话框标题
    99. "是否确定取消登录?",//对话框文本内容
    100. QMessageBox::Yes|QMessageBox::No,//提供的按钮
    101. this);//父组件
    102. box.setDefaultButton(QMessageBox::No);//将no设置为默认按钮
    103. //2、调用exec函数运行对话框
    104. int ret=box.exec();
    105. //3、对结果进行判断
    106. if(ret==QMessageBox::Yes)
    107. {
    108. close();
    109. }
    110. else if(ret==QMessageBox::No)
    111. {
    112. connect(this->btn2,SIGNAL(clicked()),this,SLOT(close()));
    113. }
    114. }
    115. widget::~widget()
    116. {
    117. }

    second.cpp

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include "second.h"
    11. QT_BEGIN_NAMESPACE
    12. namespace Ui { class widget; }
    13. QT_END_NAMESPACE
    14. class widget : public QWidget
    15. {
    16. Q_OBJECT
    17. signals://该权限下定义属于自己的信号
    18. void my_signal(QString msg);//自定义一个有参无返回值的信号函数
    19. private:
    20. void my_slot();//自定义无参无返回值的槽函数
    21. void my_slot1();//自定义无参无返回值的槽函数
    22. void on_btn1_clicked();//自定义的槽函数声明
    23. void on_btn2_clicked();//自定义的槽函数声明
    24. public:
    25. widget(QWidget *parent = nullptr);
    26. ~widget();
    27. signals:
    28. void jump();//自定义跳转信号函数
    29. private:
    30. Ui::widget *ui;
    31. //自定义一个btn1
    32. QPushButton *btn1;
    33. QPushButton *btn2;
    34. QLineEdit *edit2;
    35. QLineEdit *edit1;
    36. Second *s1;
    37. };
    38. #endif // WIDGET_H

    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 "second.h"
    11. QT_BEGIN_NAMESPACE
    12. namespace Ui { class widget; }
    13. QT_END_NAMESPACE
    14. class widget : public QWidget
    15. {
    16. Q_OBJECT
    17. signals://该权限下定义属于自己的信号
    18. void my_signal(QString msg);//自定义一个有参无返回值的信号函数
    19. private:
    20. void my_slot();//自定义无参无返回值的槽函数
    21. void my_slot1();//自定义无参无返回值的槽函数
    22. void on_btn1_clicked();//自定义的槽函数声明
    23. void on_btn2_clicked();//自定义的槽函数声明
    24. public:
    25. widget(QWidget *parent = nullptr);
    26. ~widget();
    27. signals:
    28. void jump();//自定义跳转信号函数
    29. private:
    30. Ui::widget *ui;
    31. //自定义一个btn1
    32. QPushButton *btn1;
    33. QPushButton *btn2;
    34. QLineEdit *edit2;
    35. QLineEdit *edit1;
    36. Second *s1;
    37. };
    38. #endif // WIDGET_H

    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. void jump_slot();
    12. public:
    13. explicit Second(QWidget *parent = nullptr);
    14. ~Second();
    15. private:
    16. Ui::Second *ui;
    17. };
    18. #endif // SECOND_H

    main.cpp

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

    思维导图:

  • 相关阅读:
    【信号处理】基于扩展卡尔曼滤波器和无迹卡尔曼滤波器的窄带信号时变频率估计(Matlab代码实现)
    方阵行列式与转置矩阵
    海康的资料
    MES管理系统如何解决电子企业排产难度大的问题
    第15届全国大学生知识竞赛场景实操 2022ciscn初赛 部分writeup
    python类接口和抽象超类
    springboot专利申请服务平台毕业设计源码260839
    内核驱动mmap Handler利用技术
    ae如何去除视频水印?分享三个简单的方法!
    全国双非院校考研信息汇总整理 Part.4
  • 原文地址:https://blog.csdn.net/m0_59031281/article/details/132992290