QT案例:登录对话框——主窗口

举报
howard2005 发表于 2021/12/30 01:49:14 2021/12/30
【摘要】 目录 一、案例涉及知识点 二、案例实现步骤 1、新建一个Qt Widgets Application——MultiWindowDemo 2、创建一个Qt设计师界面类LoginDialog 3、设计登录对话框界面 4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号 5、同理,给【取消】按钮添加...

目录

一、案例涉及知识点

二、案例实现步骤

1、新建一个Qt Widgets Application——MultiWindowDemo

2、创建一个Qt设计师界面类LoginDialog

3、设计登录对话框界面

4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号

5、同理,给【取消】按钮添加单击事件处理槽

6、在logindialog.h里添加信号和槽

7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中

8、修改logindialog.cpp

9、运行程序,查看效果


一、案例涉及知识点

窗口、对话框、标签、文本框、按钮、事件处理。

二、案例实现步骤

1、新建一个Qt Widgets Application——MultiWindowDemo

2、创建一个Qt设计师界面类LoginDialog

3、设计登录对话框界面

4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号

5、同理,给【取消】按钮添加单击事件处理槽

6、在logindialog.h里添加信号和槽


  
  1. #ifndef LOGINDIALOG_H
  2. #define LOGINDIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class LoginDialog;
  6. }
  7. class LoginDialog : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit LoginDialog(QWidget *parent = 0);
  12. ~LoginDialog();
  13. signals:
  14. void login(QString username, QString password);
  15. void cancel();
  16. private slots:
  17. void on_btnLogin_clicked();
  18. void on_btnCancel_clicked();
  19. void loginSlot(QString username, QString password);
  20. void cancelSlot();
  21. private:
  22. Ui::LoginDialog *ui;
  23. };
  24. #endif // LOGINDIALOG_H

7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中


  
  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. #include <logindialog.h>
  4. #include <qdesktopwidget.h>
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication a(argc, argv);
  8. MainWindow w;
  9. w.setWindowTitle("测试系统");
  10. QDesktopWidget *desktop = QApplication::desktop();
  11. LoginDialog login(&w);
  12. login.setWindowTitle("登录");
  13. login.show();
  14. login.move((desktop->width() - login.width())/ 2, (desktop->height() - login.height()) /2);
  15. return a.exec();
  16. }

8、修改logindialog.cpp

(1)构造函数里设置密码框显示模式,并且设置信号函数与槽函数之间的联系

(2)编写登录按钮单击事件处理函数

(3)编写取消按钮单击事件处理函数

(4)编写登录槽函数loginSlot

(5)编写取消槽函数cancelSlot

logindialog.cpp完整代码:


  
  1. #include "logindialog.h"
  2. #include "ui_logindialog.h"
  3. #include "mainwindow.h"
  4. #include "qmessagebox.h"
  5. LoginDialog::LoginDialog(QWidget *parent) :
  6. QDialog(parent),
  7. ui(new Ui::LoginDialog)
  8. {
  9. ui->setupUi(this);
  10. // 设置密码框显示模式
  11. ui->edtPassword->setEchoMode(QLineEdit::Password);
  12. // 设置信号函数与槽函数之间的联系
  13. connect(this, &LoginDialog::login, this, &LoginDialog::loginSlot);
  14. connect(this, &LoginDialog::cancel, this, &LoginDialog::cancelSlot);
  15. }
  16. LoginDialog::~LoginDialog()
  17. {
  18. delete ui;
  19. }
  20. void LoginDialog::on_btnLogin_clicked()
  21. {
  22. QString username = ui->edtUsername->text();
  23. QString password = ui->edtPassword->text();
  24. emit login(username, password);
  25. }
  26. void LoginDialog::on_btnCancel_clicked()
  27. {
  28. emit cancel();
  29. }
  30. void LoginDialog::loginSlot(QString username, QString password)
  31. {
  32. // 非空校验
  33. if (username.trimmed().length() == 0) {
  34. QMessageBox::information(this, "提示", "用户名不能为空!");
  35. ui->edtUsername->setFocus();
  36. return;
  37. }
  38. if (password.trimmed().length() == 0) {
  39. QMessageBox::information(this, "提示", "密码不能为空!");
  40. ui->edtPassword->setFocus();
  41. return;
  42. }
  43. // 用户合法性判断
  44. if (username == "howard" && password == "903213") {
  45. QMessageBox::information(this, "提示", "恭喜,登录成功!");
  46. parentWidget()->show();
  47. this->hide();
  48. } else {
  49. QMessageBox::information(this, "提示", "遗憾,登录失败!");
  50. }
  51. }
  52. void LoginDialog::cancelSlot()
  53. {
  54. // 清空用户名与密码文本框
  55. ui->edtUsername->setText("");
  56. ui->edtPassword->setText("");
  57. // 让用户名文本框获取焦点
  58. ui->edtUsername->setFocus();
  59. }

9、运行程序,查看效果

不输入用户名和密码就单击【登录】按钮:

输入用户名,但是不输入密码,单击【登录】按钮:

输入正确的用户名和密码,单击【登录】按钮:

如果在登录对话框里输入错误的用户名或密码,单击【登录】按钮:

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/79306498

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。