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

一、需求描述

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

二、目标样式

在这里插入图片描述

三、实现方案

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

在这里插入图片描述
2. 添加一个无button按钮的Dialog

在这里插入图片描述
按照提示一步步生成一个新的界面设计类,在原来的项目中,生成三个文件分别在Headers文件夹下的xxdialog.h、Sources文件夹下的xxdialog.cpp、Forms文件夹下的xxdialog.ui文件。

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

  1. 界面中添加相关控件
    在这里插入图片描述

  2. 设置密码编辑框的属性
    在这里插入图片描述

    登录功能的按钮实现,主界面的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类中添加该函数

Qt中,可以通过使用QStackedWidget来实现从登录界面跳转界面。QStackedWidget是一个容器小部件,可以在其中添加多个子部件,只有当前显示的子部件会被用户看到。 具体实现方法如下: 1. 创建QStackedWidget对象。 ```cpp QStackedWidget *stackedWidget = new QStackedWidget(); ``` 2. 创建登录界面界面的QWidget对象,并将它们添加到QStackedWidget中。 ```cpp QWidget *loginWidget = new QWidget(); QWidget *mainWidget = new QWidget(); stackedWidget->addWidget(loginWidget); stackedWidget->addWidget(mainWidget); ``` 3. 在登录界面中,添加按钮并在槽函数中调用QStackedWidget的setCurrentWidget()方法,将当前显示的子部件设置为界面。 ```cpp QPushButton *loginButton = new QPushButton("Login"); connect(loginButton, &QPushButton::clicked, [=](){ stackedWidget->setCurrentWidget(mainWidget); }); ``` 4. 在界面中,添加按钮并在槽函数中调用QStackedWidget的setCurrentWidget()方法,将当前显示的子部件设置为登录界面。 ```cpp QPushButton *logoutButton = new QPushButton("Logout"); connect(logoutButton, &QPushButton::clicked, [=](){ stackedWidget->setCurrentWidget(loginWidget); }); ``` 5. 将QStackedWidget对象设置为窗口的中心部件。 ```cpp QMainWindow *mainWindow = new QMainWindow(); mainWindow->setCentralWidget(stackedWidget); ``` 这样就可以实现从登录界面跳转界面,以及从界面返回到登录界面的功能了。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值