QT案例:登录对话框——主窗口
【摘要】
目录
一、案例涉及知识点
二、案例实现步骤
1、新建一个Qt Widgets Application——MultiWindowDemo
2、创建一个Qt设计师界面类LoginDialog
3、设计登录对话框界面
4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号
5、同理,给【取消】按钮添加...
目录
1、新建一个Qt Widgets Application——MultiWindowDemo
4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号
7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中
一、案例涉及知识点
窗口、对话框、标签、文本框、按钮、事件处理。
二、案例实现步骤
1、新建一个Qt Widgets Application——MultiWindowDemo
2、创建一个Qt设计师界面类LoginDialog
3、设计登录对话框界面
4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号
5、同理,给【取消】按钮添加单击事件处理槽
6、在logindialog.h里添加信号和槽
-
#ifndef LOGINDIALOG_H
-
#define LOGINDIALOG_H
-
-
#include <QDialog>
-
-
namespace Ui {
-
class LoginDialog;
-
}
-
-
class LoginDialog : public QDialog
-
{
-
Q_OBJECT
-
-
public:
-
explicit LoginDialog(QWidget *parent = 0);
-
~LoginDialog();
-
-
signals:
-
void login(QString username, QString password);
-
void cancel();
-
-
private slots:
-
void on_btnLogin_clicked();
-
void on_btnCancel_clicked();
-
void loginSlot(QString username, QString password);
-
void cancelSlot();
-
-
private:
-
Ui::LoginDialog *ui;
-
};
-
-
#endif // LOGINDIALOG_H
7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中
-
#include "mainwindow.h"
-
#include <QApplication>
-
#include <logindialog.h>
-
#include <qdesktopwidget.h>
-
-
int main(int argc, char *argv[])
-
{
-
QApplication a(argc, argv);
-
MainWindow w;
-
w.setWindowTitle("测试系统");
-
-
QDesktopWidget *desktop = QApplication::desktop();
-
-
LoginDialog login(&w);
-
login.setWindowTitle("登录");
-
login.show();
-
login.move((desktop->width() - login.width())/ 2, (desktop->height() - login.height()) /2);
-
-
return a.exec();
-
}
8、修改logindialog.cpp
(1)构造函数里设置密码框显示模式,并且设置信号函数与槽函数之间的联系
(2)编写登录按钮单击事件处理函数
(3)编写取消按钮单击事件处理函数
(4)编写登录槽函数loginSlot
(5)编写取消槽函数cancelSlot
logindialog.cpp完整代码:
-
#include "logindialog.h"
-
#include "ui_logindialog.h"
-
#include "mainwindow.h"
-
#include "qmessagebox.h"
-
-
LoginDialog::LoginDialog(QWidget *parent) :
-
QDialog(parent),
-
ui(new Ui::LoginDialog)
-
{
-
ui->setupUi(this);
-
// 设置密码框显示模式
-
ui->edtPassword->setEchoMode(QLineEdit::Password);
-
// 设置信号函数与槽函数之间的联系
-
connect(this, &LoginDialog::login, this, &LoginDialog::loginSlot);
-
connect(this, &LoginDialog::cancel, this, &LoginDialog::cancelSlot);
-
}
-
-
LoginDialog::~LoginDialog()
-
{
-
delete ui;
-
}
-
-
void LoginDialog::on_btnLogin_clicked()
-
{
-
QString username = ui->edtUsername->text();
-
QString password = ui->edtPassword->text();
-
emit login(username, password);
-
}
-
-
void LoginDialog::on_btnCancel_clicked()
-
{
-
emit cancel();
-
}
-
-
void LoginDialog::loginSlot(QString username, QString password)
-
{
-
// 非空校验
-
if (username.trimmed().length() == 0) {
-
QMessageBox::information(this, "提示", "用户名不能为空!");
-
ui->edtUsername->setFocus();
-
return;
-
}
-
if (password.trimmed().length() == 0) {
-
QMessageBox::information(this, "提示", "密码不能为空!");
-
ui->edtPassword->setFocus();
-
return;
-
}
-
// 用户合法性判断
-
if (username == "howard" && password == "903213") {
-
QMessageBox::information(this, "提示", "恭喜,登录成功!");
-
parentWidget()->show();
-
this->hide();
-
} else {
-
QMessageBox::information(this, "提示", "遗憾,登录失败!");
-
}
-
}
-
-
void LoginDialog::cancelSlot()
-
{
-
// 清空用户名与密码文本框
-
ui->edtUsername->setText("");
-
ui->edtPassword->setText("");
-
// 让用户名文本框获取焦点
-
ui->edtUsername->setFocus();
-
}
9、运行程序,查看效果
不输入用户名和密码就单击【登录】按钮:
输入用户名,但是不输入密码,单击【登录】按钮:
输入正确的用户名和密码,单击【登录】按钮:
如果在登录对话框里输入错误的用户名或密码,单击【登录】按钮:
文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。
原文链接:howard2005.blog.csdn.net/article/details/79306498
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)