简要说明
本文主要介绍登录/退出的基本思路以及简单的代码实现,不涉及数据库相关操作
1.基本思路
使用Qt信号与槽的方式实现,
点击login界面下的登录按钮,发送try_login()信号,触发mainwindow界面show函数,同时退出当前界面;
点击mainwindow下的退出按钮,触发login界面的show_login()函数,重置输入框内容,同时退出当前界面;
在主函数中实现信号与槽的关联。
/*
* 信号与槽函数的连接:connect
* 参数一:信号发出者
* 参数二:发出的信号
* 参数三:信号接收者
* 参数四:响应的槽函数
*/
//点击登录对话框的登录按钮,进入主界面
QObject::connect(&l,SIGNAL(try_login()),&w,SLOT(show()));
//点击主界面的注销,返回登录对话框
QObject::connect(&w,SIGNAL(try_exit()),&l,SLOT(show_login()));
2.新建Qt工程
为了实现登录/退出功能,我们需要两个界面,其中一个界面用来验证用户身份,实现登录功能;另外一个界面用来展示登录成功之后的界面,实现退出功能;界面布局如下图所示
3.信号与槽的说明
login(登录界面): mainwindow(Welcome界面):
信号:try_login() 信号:try_exit()
槽函数:show_login() 槽函数:show()
4.函数实现
main函数
创建应用程序,创建窗口,显示窗口,关联登录界面与Welcome界面的信号与槽,并运行应用程序,开始应用程序的消息循环和事件处理
#include "mainwindow.h"
#include "login.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
login l;
l.show();
//点击登录对话框的登录按钮,进入主界面
QObject::connect(&l,SIGNAL(try_login()),&w,SLOT(show()));
//点击主界面的退出按钮,返回登录对话框
QObject::connect(&w,SIGNAL(try_exit()),&l,SLOT(show_login()));
return a.exec();
}
login头文件
声明槽函数show_login(), 按钮点击事件login_clicked(),信号try_login()
#ifndef LOGIN_H
#define LOGIN_H
#include <QMainWindow>
namespace Ui {
class login;
}
class login : public QMainWindow
{
Q_OBJECT
public:
explicit login(QWidget *parent = 0);
~login();
signals:
void try_login(); //自定义信号try_login
private:
Ui::login *ui;
private slots:
void show_login(); //接收到try_exit()信号后执行的槽函数
void login_clicked(); //按钮点击事件,在实现中发送try_login()信号
};
#endif // LOGIN_H
login.cpp
建立信号与槽函数的连接,实现槽函数:login_clicked()与show_login()
#include "login.h"
#include "ui_login.h"
#include <QMessageBox>
login::login(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::login)
{
ui->setupUi(this);
//信号与槽的连接,登录按钮按下时,执行登录操作
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(login_clicked()));
}
login::~login()
{
delete ui;
}
void login::login_clicked()
{
//处理登录逻辑
QString account = ui->lineEdit->text(); //获取用户名文本框的内容
QString password = ui->lineEdit_2->text(); //获取密码文本框的内容
//密码为空,说明没有该用户
if(account != "admin"){
QMessageBox::warning(this,"登录失败","用户名不存在,请检查");
ui->lineEdit->clear();
ui->lineEdit_2->clear();
ui->lineEdit->setFocus();
}
//用户存在,但是密码不正确
else if(QString::compare(password,"admin",Qt::CaseSensitive))
{
QMessageBox::warning(this,"登录失败","密码错误,请检查");
ui->lineEdit->clear();
ui->lineEdit_2->clear();
ui->lineEdit_2->setFocus();
}
//用户密码均输入正确
else{
this->close(); //退出当前界面
emit(try_login()); //发送try_login()信号
}
}
void login::show_login() //接收到try_exit()信号后执行的响应函数
{
ui->lineEdit->clear();
ui->lineEdit_2->clear();
this->show();
}
mainwin头文件
声明槽函数login_clicked(),信号try_login(),相应try_exit()的槽函数使用Qt库实现的show()函数,这里不再单独定义
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void try_exit(); //自定义信号 try_exit()
private:
Ui::MainWindow *ui;
private slots:
void exit_clicked(); //按钮点击事件exit_clicked(),在实现中发送try_exit()信号
};
#endif // MAINWINDOW_H
mainwindow.cpp
建立信号与槽函数的连接,实现槽函数:exit_clicked()
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//信号与槽的连接,退出按钮按下时,执行退出操作
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(exit_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::exit_clicked()
{
this->close(); //退出当前界面
emit(try_exit()); //发送try_exit信号
}
源代码连接:
https://download.csdn.net/download/Jasonseven7/18138859
5. 参考博客:
https://blog.csdn.net/weixin_45138590/article/details/109254766