2、
头文件:
widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
- #include
//动图类 - #include
//按钮类 - #include
//文本转语音类 - #include
//对话框类 - 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 #include 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
-
- 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();
- }
功能2:如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界。
功能3:如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户点击Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能。