点击登录按钮后,判断账号和密码是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。
如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面
点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录
要求:对象版和静态成员函数版至少各实现一个
form.h
#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public:
explicit Form(QWidget *parent = nullptr);
~Form();
public slots:
void mySlot(QString e); //自定义的槽函数
private:
Ui::Form *ui;
};
#endif // FORM_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QDebug>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
//声明信号函数权限
void mySignal(QString e); //自定义一个无参无返回值信号函数
public slots:
//槽函数声明的权限
//自定义一个无参无返回值槽函数
void on_clicked_btn1();
void on_clicked_btn2();
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
form.cpp
#include "form.h"
#include "ui_form.h"
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
}
Form::~Form()
{
delete ui;
}
void Form::mySlot(QString e)
{
this->show(); //将自身界面展示出来
}
main.cpp
#include "widget.h"
#include "form.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
Form f;
//将w界面的自定义信号函数,与f界面的槽函数进行连接
QObject::connect(&w, &Widget::mySignal, &f, &Form::mySlot);
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
QLineEdit *edt2;
QLineEdit *edt1;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置窗口标题
this->setWindowTitle("my_homework");
//设置窗口图标
this->setWindowIcon(QIcon(":/icon/che.JPG"));
//固定窗口尺寸
this->setFixedSize(530,330);
//设置logo
QLabel *lab=new QLabel(this);
lab->resize(530,330);
lab->setPixmap(QPixmap(":/icon/logo.png"));
lab->setScaledContents(true);
//设置登录账号
QLabel *lab1=new QLabel(this);
lab1->move(365,255);
lab1->resize(20,20);
lab1->setPixmap(QPixmap(":/icon/userName.jpg"));
lab1->setScaledContents(true);
edt1= new QLineEdit(this);
edt1->move(390,250);
edt1->resize(135,25);
//设置登录密码
QLabel *lab2=new QLabel(this);
lab2->move(365,280);
lab2->resize(20,20);
lab2->setPixmap(QPixmap(":/icon/passwd.jpg"));
lab2->setScaledContents(true);
edt2= new QLineEdit(this);
edt2->move(390,280);
edt2->resize(135,25);
edt2->setEchoMode(QLineEdit::Password); //设置回显模式
//登录按钮
QPushButton *btn1=new QPushButton("登录",this);
btn1->move(415,305);
btn1->resize(40,25);
//取消按钮
QPushButton *btn2=new QPushButton("退出",this);
btn2->move(465,305);
btn2->resize(40,25);
//将按钮btn1发射的信号,手动连接到界面本身的自定义槽函数中
connect(btn1,&QPushButton::clicked,this,&Widget::on_clicked_btn1);
//将btn2发射的信号,手动连接到界面本身的自定义槽函数中
connect(btn2,&QPushButton::clicked,this,&Widget::on_clicked_btn2);
//将自定义的函数与自定义槽连接
connect(this,&Widget::mySignal,[](QString e){
qDebug()<<e;
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_clicked_btn1()
{
QString username=edt1->text();
QString pwd=edt2->text();
if(username=="admin"&&pwd=="123456")
{
QMessageBox::information(this,"信息","登录成功",
QMessageBox::Ok);
qDebug()<<"登录成功";
//关闭自身界面
this->close();
//跳转到其他界面
emit mySignal("hello world");
}
else
{
int ret = QMessageBox::critical(this,"error","账号密码不匹配,是否重新登录?",
QMessageBox::Ok|QMessageBox::Cancel);
qDebug()<<"账号密码不匹配";
if(ret == QMessageBox::Ok)
{
edt2->clear();
}else if(ret == QMessageBox::Cancel)
{
this->close();
}
}
}
void Widget::on_clicked_btn2()
{
int ret = QMessageBox::question(this,"question","是否确定退出?",
QMessageBox::Yes|QMessageBox::No);
if(ret == QMessageBox::Yes)
{
this->close();
}else if(ret == QMessageBox::No)
{
return;
}
}