目录
一、案例涉及知识点
二、案例实现步骤
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里添加信号和槽
#ifndef LOGINDIALOG_H#define LOGINDIALOG_H#include <QDialog>namespace Ui {class LoginDialog;}class LoginDialog : public QDialog{Q_OBJECTpublic: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、运行程序,查看效果
不输入用户名和密码就单击【登录】按钮:
输入用户名,但是不输入密码,单击【登录】按钮:
输入正确的用户名和密码,单击【登录】按钮:
如果在登录对话框里输入错误的用户名或密码,单击【登录】按钮: