完善登录界面
点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。
如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面
点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录
要求:对象版和静态成员函数版至少各实现一个
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include //添加按钮头文件
#include
#include //行编辑器类的头文件
#include //标签类的头文件
#include
#include
#include
class Widget : public QWidget
{
Q_OBJECT
signals:
void jump_success(); //自定义跳转信号
public slots:
void login_in();
void success();
void failed();
void cancel_();
public:
QLabel *lab1; //logo图片
QLabel *lab2; //账户标签图像
QLabel *lab3; //密码标签图像
QLabel *label; //圆形头像
QLineEdit *edit1; //账户行编辑器
QLineEdit *edit2; //密码行编辑器
QPushButton *btn1; //找回密码按钮
QPushButton *btn2; //登录按钮
QPushButton *btn3; //注册按钮
QPushButton *btn4; //取消登录按钮
QCheckBox *box1; //自动登录框
QCheckBox *box2; //记住密码选项框
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
//登陆时的弹框
void Widget::login_in()
{
if(this->edit1->text() == "admin" && this->edit2->text() == "123456")
{
emit success();
//connect(this->btn2,&QPushButton::clicked,this,&Widget::success); //匹配成功
}
else {
emit failed();
//connect(this->btn2,&QPushButton::clicked,this,&Widget::failed); //匹配失败
}
}
//登录成功
void Widget::success()
{
//实例化一个消息对话框的对象
QMessageBox box( //构造出一个box对象,使用有参构造完成
QMessageBox::Information, //图标
"提示信息", //对话框标题
"登录成功", //文本内容
QMessageBox::Ok, //提供的按钮
this); //父组件
//将对象 进入运行态
int ret = box.exec();
//对用户选择的结果进行判断
if(ret == QMessageBox::Ok)
{
emit jump_success(); //发射跳转信号
this->close(); //关闭登录界面
}
this->close();
}
//登陆失败
void Widget::failed()
{
QMessageBox::StandardButton ret = QMessageBox::information( //调用静态成员函数,需要加上类名和作用与限定符
this, //父组件
"提示信息", //对话框标题
"账号密码不匹配,是否重新登录", //对话框文本内容
QMessageBox::Ok|QMessageBox::Cancel, //提供的按钮
QMessageBox::Ok); //默认按钮
//对用户点击的结果进行判断
if(ret == QMessageBox::Ok)
{
//清除密码框中的内容,继续登录
edit2->clear(); //清空文本框内容
}
else if(ret == QMessageBox::Cancel)
{
//关闭界面
this->close();
}
}
//取消按钮弹框
void Widget::cancel_()
{
//实例化一个消息对话框的对象
QMessageBox box( //构造出一个box对象,使用有参构造完成
QMessageBox::Information, //图标
"提示信息", //对话框标题
"是否退出登录?", //文本内容
QMessageBox::Yes|QMessageBox::No, //提供的按钮
this); //父组件
//将对象 进入运行态
int ret = box.exec();
//对用户选择的结果进行判断
if(ret == QMessageBox::Yes)
{
this->close();//关闭整个页面
}
else if(ret == QMessageBox::No)
{
}
}
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//设置窗口固定大小
this->setFixedSize(428,300);
//窗口图标&窗口标题
//更改窗口图像
this->setWindowIcon(QIcon(":/icon/QQ.png"));
this->setWindowTitle("QQ");
//logo图片
lab1 = new QLabel(this);
lab1->resize(428,100);
lab1->move(0,0);
lab1->setStyleSheet("background-color:pink;");
//头像
QPixmap pixmap(":/icon/touxiang.jpeg"); // 加载图像
QPixmap roundedPixmap(pixmap.size()); // 创建一个圆形图像
roundedPixmap.fill(Qt::transparent); // 填充透明色
QPainter painter(&roundedPixmap);
painter.setRenderHint(QPainter::Antialiasing, true); // 设置抗锯齿
QPainterPath path;
path.addEllipse(roundedPixmap.rect()); // 创建圆形路径
painter.setClipPath(path); // 设置剪裁路径
painter.drawPixmap(pixmap.rect(), pixmap); // 在剪裁的路径内绘制原图像
label = new QLabel(this);
label->setPixmap(roundedPixmap); // 将圆形图像设置给 QLabel
label->resize(68,68);
label->move(184,60);
label->setScaledContents(true);
//账户
lab2 = new QLabel(this);
edit1 = new QLineEdit("QQ号码/手机/邮箱",this);
edit1->resize(200,30);
edit1->move(140,130);
lab2->resize(25,25);
lab2->move(110,130);
lab2->setScaledContents(true);
lab2->setPixmap(QPixmap(":/icon/denglu.png"));
//手动构造一个行编辑器,密码
lab3 = new QLabel(this);
edit2 = new QLineEdit(this);
edit2->resize(200,30);
edit2->move(140,175);
edit2->setEchoMode(QLineEdit::Password); //设置回显模式为密文模式
edit2->setPlaceholderText("密码"); //设置占位文本
lab3->resize(25,25);
lab3->move(110,175);
lab3->setScaledContents(true);
lab3->setPixmap(QPixmap(":/icon/denglumima.png"));
//自动登录、取消密码
box1 = new QCheckBox;
box1->setParent(this); //将该界面作为组件的父组件
//重新设置大小
box1->resize(80,50);
box1->setText("自动登录");
box1->move(110,195);
box2 = new QCheckBox(this); //在构造时给定父组件
//重新设置大小
box2->resize(80,50);
box2->setText("记住密码");
box2->move(200,195);
//找回密码
btn1 = new QPushButton(this);
btn1->setText("找回密码");
btn1->resize(80,45);
btn1->move(275,197);
btn1->setStyleSheet("border:none;");
//登录
btn2 = new QPushButton(this);
this->
btn2->setText("登录");
btn2->resize(100,30);
btn2->move(110,240);
btn2->setIcon(QIcon(":/icon/denglu_1.png"));
btn2->setStyleSheet("background-color:skyblue;");
connect(this->btn2,&QPushButton::clicked,this,&Widget::login_in);
//取消(登录)按钮
btn4 = new QPushButton(this);
this->
btn4->setText("取消");
btn4->resize(100,30);
btn4->move(230,240);
btn4->setIcon(QIcon(":/icon/quxiao.png"));
btn4->setStyleSheet("background-color:skyblue;");
connect(this->btn4,&QPushButton::clicked,this,&Widget::cancel_);
//注册账号
btn3 = new QPushButton(this);
btn3->setText("注册账号");
btn3->resize(80,45);
btn3->move(0,260);
btn3->setStyleSheet("border:none;");
}
Widget::~Widget()
{
}
main.cpp:
#include "widget.h"
#include
#include"form.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
Form f;
QObject::connect(&w,&Widget::jump_success,&f,&Form::jump_slot);
return a.exec();
}
form.h:
#ifndef FORM_H
#define FORM_H
#include
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public slots:
void jump_slot();
public:
explicit Form(QWidget *parent = nullptr);
~Form();
private:
Ui::Form *ui;
};
#endif // FORM_H
form.cpp:
#include "form.h"
#include "ui_form.h"
//登陆成功后处理界面跳转函数对应的槽函数的实现
void Form::jump_slot()
{
this->show(); //将该界面进行展示
}
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
}
Form::~Form()
{
delete ui;
}