• QT_day3


    完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到新的界面中

    如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面

    如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户点击Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能

    要求:基于属性版和基于静态成员函数版至少各用一个

    要求:尽量每行代码都有注释


    mywidget.h

    1. #ifndef MYWIDGET_H
    2. #define MYWIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. QT_BEGIN_NAMESPACE
    9. namespace Ui { class MyWidget; }
    10. QT_END_NAMESPACE
    11. class MyWidget : public QWidget
    12. {
    13. Q_OBJECT
    14. public:
    15. MyWidget(QWidget *parent = nullptr);
    16. ~MyWidget();
    17. public slots: //表示该权限下都是公共的槽函数
    18. void cancelBtn_slots(); //自定义一个槽函数
    19. void loginBtn_slot();
    20. signals:
    21. void jump(); //自定义一个跳转信号
    22. private:
    23. Ui::MyWidget *ui;
    24. };
    25. #endif // MYWIDGET_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. explicit Second(QWidget *parent = nullptr);
    12. ~Second();
    13. public slots:
    14. void jumpSlot(); //对应第一个窗口信号的槽函数声明
    15. private:
    16. Ui::Second *ui;
    17. };
    18. #endif // SECOND_H

    main.cpp

    1. #include "mywidget.h"
    2. #include "second.h"
    3. #include
    4. int main(int argc, char *argv[])
    5. {
    6. QApplication a(argc, argv);
    7. MyWidget w;
    8. w.show();
    9. //实例化第二个窗口的对象
    10. Second s;
    11. //将第一个窗口的jump信号和第二窗口的jumpslot槽函数连接
    12. QObject::connect(&w,&MyWidget::jump,&s,&Second::jumpSlot);
    13. return a.exec();
    14. }

    mywidget.cpp

    1. #include "mywidget.h"
    2. #include "ui_mywidget.h"
    3. MyWidget::MyWidget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::MyWidget)
    6. {
    7. ui->setupUi(this);
    8. //窗口相关设置
    9. this->setWindowTitle("QQ聊天");
    10. this->setWindowIcon(QIcon(":/pictrue/qq.png"));
    11. this->setFixedSize(601,394);
    12. //logo设置
    13. ui->logoLab->setPixmap(QPixmap(":/pictrue/logo.png"));
    14. ui->logoLab->setScaledContents(true);
    15. //账号
    16. ui->userNameLab->resize(30,30);
    17. ui->userNameLab->setPixmap(QPixmap(":/pictrue/wodepeizhenshi.png"));
    18. ui->userNameLab->setScaledContents(true);
    19. ui->userNameEdit->setPlaceholderText("QQ账号/手机/邮箱");
    20. //密码
    21. ui->passwordLab->resize(30,30);
    22. ui->passwordLab->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    23. ui->passwordLab->setScaledContents(true);
    24. ui->passwordEdit->setEchoMode(QLineEdit::Password);
    25. //登录和取消
    26. ui->loginBtn->setIcon(QIcon(":/pictrue/login.png"));
    27. ui->cancelBtn->setIcon(QIcon(":/pictrue/cancel.png"));
    28. //手动连接信号和系统槽,基于qt4版本 是不友好的连接
    29. //取消 利用槽函数点击实现关闭
    30. this->connect(ui->cancelBtn,SIGNAL(clicked()),this,SLOT(cancelBtn_slots()));
    31. //手动连接信号和系统槽,基于qt5版本 是友好的连接
    32. connect(ui->loginBtn,&QPushButton::clicked,this,&MyWidget::loginBtn_slot);
    33. }
    34. MyWidget::~MyWidget()
    35. {
    36. delete ui;
    37. }
    38. void MyWidget::cancelBtn_slots()
    39. {
    40. // //用消息对话框 实例化一个对象 属性版
    41. // QMessageBox msg(
    42. // QMessageBox::Question, //图标
    43. // "问题", //标题
    44. // "您是否确定要退出登录?", //文本
    45. // QMessageBox::Yes | QMessageBox::No, //提供按钮
    46. // this); //父对象
    47. // //用 exec() 执行对话框
    48. // int ret = msg.exec();
    49. // //对用户选中的按钮进行判断
    50. // if(ret == QMessageBox::Yes)
    51. // {
    52. // this->close();
    53. // }
    54. // else
    55. // {
    56. // msg.close();
    57. // }
    58. //用消息对话框 静态成员函数版
    59. int ret = QMessageBox::question(this, //父对象
    60. "问题", //标题
    61. "您是否确定要退出登录?", //文本
    62. QMessageBox::Yes | QMessageBox::No); //提供按钮
    63. //对用户选中的按钮进行判断
    64. if(ret == QMessageBox::Yes)
    65. {
    66. this->close();
    67. }
    68. else
    69. {
    70. return;
    71. }
    72. }
    73. void MyWidget::loginBtn_slot()
    74. {
    75. if(ui->userNameEdit->text() == "admin" && ui->passwordEdit->text() == "123456")
    76. {
    77. //用消息对话框 实例化一个对象 属性版
    78. // QMessageBox msg(
    79. // QMessageBox::Information, //图标
    80. // "提示", //标题
    81. // "登录成功", //文本
    82. // QMessageBox::Ok, //提供按钮
    83. // this); //父对象
    84. //用 exec() 执行对话框
    85. // msg.exec();
    86. //用消息对话框 静态成员函数版
    87. QMessageBox::question(this, //父对象
    88. "提示", //标题
    89. "登录成功", //文本
    90. QMessageBox::Ok); //提供按钮
    91. this->close();
    92. emit jump();
    93. qDebug("%s\n","登录成功");
    94. this->close();
    95. }
    96. else
    97. {
    98. // //用消息对话框 实例化一个对象 属性版
    99. // QMessageBox msg(
    100. // QMessageBox::Critical, //图标
    101. // "错误", //标题
    102. // "账号和密码不匹配,是否重新登录", //文本
    103. // QMessageBox::Yes | QMessageBox::No, //提供按钮
    104. // this); //父对象
    105. // //用 exec() 执行对话框
    106. // int ret = msg.exec();
    107. // //对用户选中的按钮进行判断
    108. // if(ret == QMessageBox::Yes)
    109. // {
    110. // ui->passwordEdit->clear();
    111. // }
    112. // else
    113. // {
    114. // this->close();
    115. // }
    116. //用消息对话框 静态成员函数版
    117. int ret = QMessageBox::critical(this, //父对象
    118. "错误", //标题
    119. "账号和密码不匹配,是否重新登录", //文本
    120. QMessageBox::Yes | QMessageBox::No); //提供按钮
    121. //对用户选中的按钮进行判断
    122. if(ret == QMessageBox::Yes)
    123. {
    124. ui->passwordEdit->clear();
    125. }
    126. else
    127. {
    128. this->close();
    129. }
    130. qDebug("%s\n","登录失败");
    131. }
    132. }

    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. //第一个窗口信号对应的槽函数
    14. void Second::jumpSlot()
    15. {
    16. this->show();
    17. }

    思维导图

  • 相关阅读:
    node笔记记录26aynsc和await
    批处理中的%~语法
    卷积神经网络原理及其C++/Opencv实现(6)—前向传播代码实现
    SourceTree配置代理详细方法
    OpenCV的介绍以及常用方法(Java)
    什么是 java 序列化?什么情况下需要序列化?
    不可错过的10本架构师必读书籍,带你嗨翻架构师之路,三连评论送书!
    智慧铁路:机车整备场数字孪生
    贪心算法问题
    SHELL脚本编程基础,bilibili王晓春老师课程个人笔记(写比较简单,仅供参考)
  • 原文地址:https://blog.csdn.net/2301_79218296/article/details/133933946