• 2023/09/15 qt day2


    完善登录框
    点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文
    本内容"账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。
    如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功",给出一个按钮ok,点击ok后,关闭整
    个登录界面,跳转到其他界面
    点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes/no,点击yes,则直接关
    闭整个登录界面,如果点击no则进行进行登录
    要求:消息对话框,对象版和静态成员函数版至少各实现一个

    denglu.h

    1. #ifndef DENGLU_H
    2. #define DENGLU_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include "second.h"
    10. #include //消息对话框类
    11. QT_BEGIN_NAMESPACE
    12. namespace Ui { class denglu; }
    13. QT_END_NAMESPACE
    14. class denglu : public QMainWindow
    15. {
    16. Q_OBJECT
    17. public:
    18. denglu(QWidget *parent = nullptr);
    19. ~denglu();
    20. signals:
    21. void jump(); //自定义跳转信号函数
    22. private slots:
    23. void b1_clicked();
    24. void b2_clicked();
    25. private:
    26. Ui::denglu *ui;
    27. QLabel *lab1;
    28. QLabel *lab2;
    29. QLabel *lab3;
    30. QLineEdit *edit1;
    31. QLineEdit *edit2;
    32. QPushButton *b1;
    33. QPushButton *b2;
    34. Second *s1;
    35. };
    36. #endif // DENGLU_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 jump_slot();
    15. private:
    16. Ui::Second *ui;
    17. };
    18. #endif // SECOND_H

    denglu.cpp

    1. #include "denglu.h"
    2. #include "ui_denglu.h"
    3. denglu::denglu(QWidget *parent)
    4. : QMainWindow(parent)
    5. , ui(new Ui::denglu)
    6. {
    7. ui->setupUi(this);
    8. this->setFixedSize(430,360); //设置固定主界面尺寸
    9. this->setWindowTitle("Widget"); //设置窗口标题
    10. this->setWindowIcon(QIcon(":/Image/icon/wodepeizhenshi.png"));
    11. //实例化一个标签
    12. lab1 = new QLabel(this);
    13. lab1->resize(430,180); //设置占窗体一半尺寸
    14. lab1->setPixmap(QPixmap(":/Image/icon/logo.png"));
    15. lab1->setScaledContents(1);
    16. //实例化第二个标签
    17. lab2 = new QLabel(this);
    18. lab2->resize(45,30); //设置尺寸
    19. lab2->move(this->x()+65,this->y()+200); //移动位置
    20. lab2->setPixmap(QPixmap(":/Image/icon/userName.jpg"));//填充图片
    21. lab2->setScaledContents(1);
    22. //实例化第三个标签
    23. lab3 = new QLabel(this);
    24. lab3->resize(45,30); //设置尺寸
    25. lab3->move(lab2->x(),lab2->y()+60); //移动位置
    26. lab3->setPixmap(QPixmap(":/Image/icon/passwd.jpg"));//填充图片
    27. lab3->setScaledContents(1);
    28. //实例化行编辑器1
    29. edit1 = new QLineEdit(this);
    30. edit1->resize(200,32); //设置尺寸
    31. edit1->move(lab2->x()+55,lab2->y()); //移动位置
    32. edit1->setPlaceholderText("admin"); //设置默认值,占位文本
    33. //实例化行编辑器2
    34. edit2 = new QLineEdit(this);
    35. edit2->resize(200,32); //设置尺寸
    36. edit2->move(lab3->x()+55,lab3->y()); //移动位置
    37. edit2->setEchoMode(QLineEdit::Password); //设置回显模式
    38. edit2->setMaxLength(6); //设置最大文本容量
    39. //实例化按钮1
    40. b1 = new QPushButton(QIcon(":/Image/icon/login.png"),"登录",this);
    41. b1->resize(80,32); //设置尺寸
    42. b1->move(this->x()+100,lab3->y()+50); //移动位置
    43. //实例化按钮2
    44. b2 = new QPushButton(QIcon(":/Image/icon/cancel.png"),"取消",this);
    45. b2->resize(80,32); //设置尺寸
    46. b2->move(this->x()+230,b1->y()); //移动位置
    47. //将当前界面的信号,与登录消息对话框函数连接
    48. connect(b1,&QPushButton::clicked,this,&denglu::b1_clicked);
    49. //将当前界面的信号,与取消消息对话框函数连接
    50. connect(b2,&QPushButton::clicked,this,&denglu::b2_clicked);
    51. //将当前界面的信号,与s1界面的槽函数进行连接
    52. s1 = new Second;
    53. connect(this,&denglu::jump,s1,&Second::jump_slot);
    54. }
    55. denglu::~denglu()
    56. {
    57. delete ui;
    58. }
    59. void denglu::b1_clicked()
    60. {
    61. if(this->edit1->text()!="admin" && this->edit2->text()!=123456)
    62. {
    63. QMessageBox box(QMessageBox::Critical,
    64. "出错",
    65. "账号密码不匹配,是否重新登录",
    66. QMessageBox::Ok|QMessageBox::Cancel,
    67. this); //父组件
    68. box.setDefaultButton(QMessageBox::Ok); //设置默认
    69. //调用exec函数允许对话框
    70. int ret = box.exec();
    71. //对结果进行判断
    72. if(ret == QMessageBox::Ok)
    73. {
    74. this->edit2->clear();
    75. }
    76. else if(ret == QMessageBox::Cancel)
    77. {
    78. this->hide();
    79. }
    80. }
    81. else if(this->edit1->text()=="admin" && this->edit2->text()=="123456")
    82. {
    83. //直接调用静态成员函数完成对话框的实现
    84. int ret = QMessageBox::information(this,
    85. "信息",
    86. "登录成功",
    87. QMessageBox::Ok);
    88. if(ret ==QMessageBox::Ok)
    89. {
    90. //关闭登录界面
    91. this->hide();
    92. //跳转到其他页面
    93. emit jump();
    94. }
    95. }
    96. }
    97. void denglu::b2_clicked()
    98. {
    99. int ret = QMessageBox::information(this,
    100. "退出",
    101. "是否确定要退出登录",
    102. QMessageBox::Yes|QMessageBox::No);
    103. if(ret == QMessageBox::Yes)
    104. {
    105. this->close();
    106. }
    107. else if(ret == QMessageBox::No)
    108. {
    109. //不做操作
    110. }
    111. }

    main.cpp

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

    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. this->show();
    16. }

  • 相关阅读:
    GAN生成漫画脸
    渗透测试 | 域名信息收集
    计算机毕业设计springboot+vue基本医院公众号建设推动医疗卫生服务现状研究
    Apache Skywalking 安装部署、指标说明
    神经系统图 基本结构图,大脑神经网络结构图片
    【Vue】所有指令详解
    conda和pip查看、配置源
    Elasticsearch面试题
    数值常量如何转化为内存地址?
    数据治理-数据存储和操作-数据库组织模型
  • 原文地址:https://blog.csdn.net/cscssacd/article/details/132996823