作业
优化登录框:
当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录
当用户点击的登录按钮,进行账号和密码的匹配,如果匹配成功,则弹出信息对话框,给出信息为登录成功,并给出一个确定按钮,当用户点击该按钮后,关闭登录界面,弹出另一个界面
当账号和密码不匹配是,给出错误对话框,给出信息为账号和密码不匹配,是否重新登录,并提供两个按钮 Yes|No,如果用户点击了Yes,则清空密码框后,继续登录。如果用户点击的取消,则关闭登录界面 要求:静态成员函数版本和对象版本各至少实现一个
login.h代码
#ifndef LOGIN_H
#define LOGIN_H#include <QWidget>namespace Ui {
class Login;
}class Login : public QWidget
{Q_OBJECTpublic:explicit Login(QWidget *parent = nullptr);~Login();public slots:void jump_slot() //用于接收跳转的槽函数{this->show();}private:Ui::Login *ui;
};#endif // LOGIN_H
widget.h代码
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>
#include<QString>
#include <QMessageBox>class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();signals:void jump();public slots:void login_clicked();void on_questIconbtn_clicked();private:QPushButton *btn1;QPushButton *btn2;QLineEdit *edit1;QLineEdit *edit2;QLabel *lab1;QLabel *lab2;QLabel *lab3;QLabel *lab4;QMovie *movie;
};
#endif // WIDGET_H
login.cpp代码
#include "login.h"
#include "ui_login.h"Login::Login(QWidget *parent) :QWidget(parent),ui(new Ui::Login)
{ui->setupUi(this);
}Login::~Login()
{delete ui;
}
main.cpp代码
#include "widget.h"
#include "login.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();Login s;QObject::connect(&w,&Widget::jump,&s,&Login::jump_slot);return a.exec();
}
widget.cpp代码
#include "widget.h"
#include <QtDebug>Widget::Widget(QWidget *parent): QWidget(parent)
{//1、设置窗口this->setFixedSize(600,400); //设置界面尺寸this->setWindowTitle("QQ"); //设置窗口标题//设置图标,使用匿名对象完成this->setWindowIcon(QIcon(":/icon/QQ.png"));//2、设置按钮//使用无参构造在堆区申请一个按钮this->btn1 = new QPushButton(this);btn1->setParent(this); //将当前界面设置成组件的父组件btn1->setText("登录"); //设置按钮文本内容btn1->resize(80,40); //重新设置按钮尺寸btn1->move(180,320); //移动当前组件位置//设置样式表btn1->setStyleSheet("color:white;background-color:skyblue;border-radius:10px;");//使用有参构造,构造一个按钮,实例化对象时,顺便给定父组件this->btn2 = new QPushButton(this);btn2->setText("取消");//使用btn1的尺寸设置当前按钮的尺寸btn2->resize(btn1->size());//使用btn1的位置,确定btn2的位置btn2->move(btn1->x()+btn1->width()+10,btn1->y());//设置样式表btn2->setStyleSheet("color:white;background-color:skyblue;border-radius:10px;");//3、设置行编辑器//使用有参构造一个行编辑器this->edit1 = new QLineEdit(this);edit1->resize(250,40); //重置尺寸edit1->move(150,160);edit1->setAlignment(Qt::AlignCenter); //设置文本对齐方式edit1->setPlaceholderText("请输入QQ账号"); //设置占位文本//使用有参构造一个行编辑器this->edit2 = new QLineEdit(this);edit2->resize(edit1->size()); //重置尺寸edit2->move(150,220); //移动位置edit2->setPlaceholderText("请输入QQ密码"); //设置占位文本edit2->setAlignment(Qt::AlignCenter); //设置文本对齐方式edit2->setEchoMode(QLineEdit::Password); //设置回显模式//4、设置标签this->lab1 = new QLabel(this);lab1->setText("账号");lab1->move(100,170);this->lab2 = new QLabel(this);lab2->setText("密码");lab2->move(100,230);this->lab3 = new QLabel(this);//lab3->setStyleSheet("background-color:skyblue;");lab3->move(0,0);lab3->setFixedSize(600,140);//给标签设置动图//创建一个movie对象this->movie = new QMovie(":/icon/bj.gif");//将动图对象放入到标签中lab3->setMovie(movie);//让动图动起来movie->start();//让标签内容自适应大小lab3->setScaledContents(true);//给标签设置静态图this->lab4 = new QLabel(this);lab4->resize(60,60);lab4->move(260,80);lab4->setPixmap(QPixmap(":/icon/tx.jpg"));lab4->setScaledContents(true);connect(btn1, &QPushButton::clicked, this, &Widget::login_clicked);connect(btn2, &QPushButton::clicked, this, &Widget::on_questIconbtn_clicked);}Widget::~Widget()
{
}
/*
void Widget::login_clicked()
{this->close();emit jump();
}
*///按钮1对应的槽函数
void Widget::login_clicked()
{if(edit1->text() == edit2->text()){QMessageBox box(QMessageBox::Information, //图标,问题图标"登录", //对话框标题"登录成功", //对话框文本内容QMessageBox::Ok, //对话框提供的按钮this); //父组件box.exec();//2、对用户点击的按钮进行判断this->close();emit jump();}else{//1、实例化一个消息对话框的对象QMessageBox box(QMessageBox::Warning, //图标,问题图标"警告", //对话框标题"账号和密码不匹配,是否重新登录?", //对话框文本内容QMessageBox::Ok | QMessageBox::No, //对话框提供的按钮this); //父组件//2、调用函数设置相关属性box.setButtonText(QMessageBox::Ok,"Yes");box.setDefaultButton(QMessageBox::No);//3、显示对话框 并返回用户点击的那个按钮值int btn = box.exec();//4、判断用户点击的按钮值if(btn == QMessageBox::Ok){edit2->clear();}else if(btn == QMessageBox::No){this->close();}edit2->clear();}
}//取消按钮对应的槽函数
void Widget::on_questIconbtn_clicked()
{//1、实例化一个消息对话框的对象QMessageBox box(QMessageBox::Question, //图标,问题图标"问题", //对话框标题"是否要确定退出登录?", //对话框文本内容QMessageBox::Ok | QMessageBox::No, //对话框提供的按钮this); //父组件//2、调用函数设置相关属性box.setButtonText(QMessageBox::Ok,"yes");box.setDefaultButton(QMessageBox::No);//3、显示对话框 并返回用户点击的那个按钮值int btn = box.exec();//4、判断用户点击的按钮值if(btn == QMessageBox::Ok){this->close();}else if(btn == QMessageBox::No){qDebug() << "继续登录";}
}
运行效果:
点击取消按钮效果
点击No效果
输入账号密码不一致
点击Yes按钮
输入账号密码一致
点击OK按钮
知识梳理
对话框资源