头文件:
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QLabel> //标签类头文件
#include<QPushButton> //按钮类头文件
#include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic slots:void clicked_slot(); //声明自定义的处理登录按钮的槽函数void QMessageBox_cancle(); //声明点击取消按钮的槽函数
signals:void jump(); //自定义跳转信号public:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H
#ifndef SECOND_H
#define SECOND_H#include <QWidget>namespace Ui {
class second;
}class second : public QWidget
{Q_OBJECTpublic slots:void jump_slot(); //界面2提供一个用于接收跳转信号的槽public:explicit second(QWidget *parent = nullptr);~second();private:Ui::second *ui;
};#endif // SECOND_H
源文件:
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QMessageBox>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(400,560); //设置界面固定大小//将登录按钮的clicked信号连接到自定义的槽函数中QObject::connect(ui->pushButton,&QPushButton::clicked,this,&Widget::clicked_slot);//将取消按钮的clicked信号连接到lambda表达式中/*QObject::connect(ui->pushButton_2,&QPushButton::clicked,[&](){this->close();});*/QObject::connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::QMessageBox_cancle);}Widget::~Widget()
{delete ui;
}//登录按钮的点击信号对应的槽函数
void Widget::clicked_slot()
{//获取账号和密码QString usrname=ui->lineEdit->text(); //获取账号QString pwd=ui->lineEdit_2->text(); //获取密码//判断账号和密码是否一致if(usrname==pwd&&usrname!=""){int res=QMessageBox::information(this,"信息对话框","登录成功",QMessageBox::Ok);if(res==QMessageBox::Ok){//关闭当前界面this->close();}//发射一个跳转信号emit jump();}else{int res=QMessageBox::critical(this,"错误对话框","账号和密码不匹配,是否重新登录",QMessageBox::Yes |QMessageBox::No,QMessageBox::Yes);if(res==QMessageBox::Yes){ui->lineEdit_2->clear(); //清空密码框内容}else if(res==QMessageBox::No){this->close();}}
}void Widget::QMessageBox_cancle()
{QMessageBox box(QMessageBox::Question,"问题对话框","是否退出登录",QMessageBox::Yes |QMessageBox::No,this);int res=box.exec();if(res==QMessageBox::Yes){this->close();}else if(res==QMessageBox::No){//啥也不干}
}
#include "second.h"
#include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second)
{ui->setupUi(this);
}second::~second()
{delete ui;
}//界面2的接收跳转信号的槽函数实现
void second::jump_slot()
{this->show();
}
主程序:
#include "widget.h" //第一个界面的头文件
#include"second.h" //第二个界面的头文件#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w; //第一个界面的实例w.show(); //展示第一个界面second s; //第二个界面的实例//将两个界面的信号与槽进行连接QObject::connect(&w,&Widget::jump,&s,&second::jump_slot);//以上四个参数表示:第一个界面发射信号、发射的是跳转信号、第二个界面接收信号、接收后的处理逻辑return a.exec();
}