1.思维导图
2、
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面
如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面
如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户迪纳基Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能
要求:基于属性版和基于静态成员函数版至少各用一个
头文件:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QMovie>//动图类
#include <QPushButton>//按钮类
#include <QtTextToSpeech>//文本转语音类
#include <QMessageBox>//对话框类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECT//宏,信号与槽public:Widget(QWidget *parent = nullptr);~Widget();
signals:void my_jump();//第一个界面的信号private:Ui::Widget *ui;QTextToSpeech *speecher;//定义一个语音播报着public slots: //表示该权限下是私有槽函数(一般由系统提供)void my_slot();void my_slot1();};
#endif // WIDGET_H
sec.h
#ifndef SEC_H #define SEC_H#include <QWidget> #include <QMenuBar> namespace Ui { class sec; }class sec : public QWidget {Q_OBJECTpublic:explicit sec(QWidget *parent = nullptr);~sec();private:Ui::sec *ui; public slots:void my_jump_slot();//第二个界面的槽函数 };#endif // SEC_H
主函数:
main.cpp
#include "widget.h"
#include "sec.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;//实例化第一个窗口w.show();sec s; //实例化第二个窗口//将第一个窗口和第二个窗口连接QObject::connect(&w,&Widget::my_jump,&s,&sec::my_jump_slot);return a.exec();
}
功能函数:
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);speecher =new QTextToSpeech(this);//给语音播报者实例化空间//***********************窗口类*******************************//this->setWindowFlags(Qt::FramelessWindowHint);//***********************标签类*******************************//QMovie *mv=new QMovie(":/new/prefix1/22/1.gif");//设置动图ui->logoLab->setMovie(mv);//将动图放到logo标签上mv->start();//让动图开始ui->logoLab->setScaledContents(true);//设置动图自适应//设置头像样式ui->labh->setStyleSheet("border-radius:30px");//手动连接信号和系统的槽函数 基于qt4版的连接 该连接是不友好的连接connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(my_slot()));//手动连接信号和自定义槽函数 基于qt5版的连接 该连接是友好的连接connect(ui->loginButton,&QPushButton::clicked,this,&Widget::my_slot1);
}Widget::~Widget()
{delete ui;
}void Widget::my_slot() //取消按钮自定义的函数处理
{ //基于静态成员函数版本实现int ret=QMessageBox::question(this,//父组件"问题",//标题"您是否确定要退出登录?",//文本QMessageBox::Yes|QMessageBox::No);//提供的按钮if(ret==QMessageBox::Yes)//对用户选中的按钮,执行不同的功能{this->close();//关闭当前的界面}}void Widget::my_slot1()//登录按钮自定义的函数处理
{if(ui->lineEdit->text()=="admin" && ui->lineEdit_2->text()=="123456")//判断登录的账号和密码是否正确{ui->msgLab->setText("登陆成功!");//修改状态信息标签speecher->say("登录成功");//语音播报QMessageBox box(QMessageBox::Information, //基于属性版本"提示", //标题"登陆成功", //文本QMessageBox::Ok, //提供按钮this); //父对象int ret=box.exec(); //使用exec()弹出对话框if(ret==QMessageBox::Ok) //根据用户选中的按钮 执行不同的功能{emit this->my_jump();//触发一个界面的信号this->close(); //关闭当前的界面}}else{speecher->say("登录失败");//语音播报int res=QMessageBox::critical(this, //父组件 //基于静态成员函数版本实现"错误", //标题"账号和密码不匹配,是否重新登录?",//文本QMessageBox::Yes|QMessageBox::No);//提供的按钮ui->msgLab->setText("登陆失败!");//修改状态信息标签if(res==QMessageBox::Yes) //对用户选中的按钮,执行不同的功能{ui->lineEdit_2->setText("");//将密码行编辑器内容清空}else{this->close();//关闭当前的界面}}}
sec.cpp
#include "sec.h"
#include "ui_sec.h"sec::sec(QWidget *parent) :QWidget(parent),ui(new Ui::sec)
{ui->setupUi(this);}sec::~sec()
{delete ui;
}
//槽函数的实现
void sec::my_jump_slot()
{this->show();
}
实际效果:
功能1:点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面。
功能2:如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界。
功能3:如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户点击Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能。
代码主要功能截图: