Qt-登录界面到主界面的跳转

文章目录

    • 一、需求描述
    • 二、目标样式
    • 三、实现方案
    • 四、代码实现

一、需求描述

在多元管理的模式下,在原有设计的主界面之上,添加登录界面,实现登录界面到主界面的跳转功能。现如今的检测功能只根据账户名和密码匹配。

二、目标样式

Qt-登录界面到主界面的跳转_第1张图片

三、实现方案

  1. 原主界面基础上添加新的登录界面

Qt-登录界面到主界面的跳转_第2张图片
2. 添加一个无button按钮的Dialog

Qt-登录界面到主界面的跳转_第3张图片
按照提示一步步生成一个新的界面设计类,在原来的项目中,生成三个文件分别在Headers文件夹下的xxdialog.h、Sources文件夹下的xxdialog.cpp、Forms文件夹下的xxdialog.ui文件。

首先是对于xxdialog.ui界面的设计。在界面中添加两个label(分别是用户名和密码);两个单行编辑框QLineEdit(用于输入用户名和密码),密码的编辑框的echoMode格式设置为Password属性如下图所示;两个pushButton(分别用于确认页面跳转和取消功能的实现)。

  1. 界面中添加相关控件
    Qt-登录界面到主界面的跳转_第4张图片

  2. 设置密码编辑框的属性
    Qt-登录界面到主界面的跳转_第5张图片

    登录功能的按钮实现,主界面的show()相关的函数注释掉,通过点击按钮响应函数来设置主界面显示信号并隐藏登录界面,进而通过响应信号显示主界面。代码的具体过程如下。

四、代码实现

xxdialog.h文件

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H


namespace Ui {
class LogInDialog;
}

class LogInDialog : public QDialog
{
  Q_OBJECT
  
public:
  explicit LogInDialog(QWidget *parent = nullptr);
  ~LogInDialog();
  void keyPressEvent(QKeyEvent \*event);    //设置回车响应函数

signals:
  void showmain();

private slots:
  void on_pB_OK_clicked();
  void on_pB_Exit_clicked();

private:
  Ui::LogInDialog *ui;
};

#endif // LOGINDIALOG_H

xxdialog.cpp文件

void LogInDialog::on_pB_OK_clicked()
{
  	if((ui->lineEdit_Login->text() == "root") && (ui->lineEdit_Pwd->text() == "123456")){
    	this->hide();
   	 	emit showmain();
  	}

 	else if((ui->lineEdit_Login->text() == "") || (ui->lineEdit_Pwd->text() == "")){
	    QMessageBox::warning(this, tr("提示"), tr("用户名或密码不能为空"), QMessageBox::Yes);
    	ui->lineEdit_Login->clear();
    	ui->lineEdit_Login->setFocus();
  	}

  	else if(ui->lineEdit_Login->text() != "root"){
    	QMessageBox::warning(this, tr("提示"), tr("用户名不存在,请重新输入"), QMessageBox::Yes);
    	ui->lineEdit_Login->clear();
    	ui->lineEdit_Login->setFocus();
  	}

  	else if((ui->lineEdit_Login->text() == "root") && (ui->lineEdit_Pwd->text()!= "123456")){
    	QMessageBox::warning(this, tr("提示"), tr("用户名密码不匹配,请重新输入"), QMessageBox::Yes);
    	ui->lineEdit_Login->setFocus();
  	}
}
void LogInDialog::on_pB_Exit_clicked()
{
  this->close();
}
 
void LogInDialog::keyPressEvent(QKeyEvent \*event)
{
  	if(event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return){
		emit ui->pB_OK->click();
  	}
}

主界面main.cpp文件

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	MainWindow w;
	LogInDialog logIn;

	logIn.setWindowTitle("登录界面");
	logIn.show();

	w.Run();        // 空函数 备用
	w.resize(1500,750);  // 设置默认窗口初始大小
	//w.show();

	QObject::connect(&logIn, SIGNAL(showmain()), &w, SLOT(receiveLogin()));
	w.move((QApplication::desktop()->width() - w.width()) / 2, (QApplication::desktop()->height() - w.height()) / 2);  // 窗口设置居中显示

	// 通信模块建立tcp长连接 供前端通信使用
	pstSockCom->sock_init();
	pthread_t hPth;
	// pthread_create(&hPth, NULL, recv_parse_thread, (void *) pstSockCom);
	
	return a.exec();
}

主界面mainwindow.cpp文件

void MainWindow::receiveLogin()
{
  this->show();
}

主函数的mainwindow.h类中添加该函数

你可能感兴趣的:(C++Qt/VC++MFC,Qt,Dialog,登录界面,跳转)