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_NAMESPACE
class 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_OBJECT public: 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后,关闭对话框,继续执行登录功能。
代码主要功能截图: