一、需求描述
在多元管理的模式下,在原有设计的主界面之上,添加登录界面,实现登录界面到主界面的跳转功能。现如今的检测功能只根据账户名和密码匹配。
二、目标样式
三、实现方案
- 原主界面基础上添加新的登录界面
2. 添加一个无button按钮的Dialog
按照提示一步步生成一个新的界面设计类,在原来的项目中,生成三个文件分别在Headers文件夹下的xxdialog.h、Sources文件夹下的xxdialog.cpp、Forms文件夹下的xxdialog.ui文件。
首先是对于xxdialog.ui界面的设计。在界面中添加两个label(分别是用户名和密码);两个单行编辑框QLineEdit(用于输入用户名和密码),密码的编辑框的echoMode格式设置为Password属性如下图所示;两个pushButton(分别用于确认页面跳转和取消功能的实现)。
-
界面中添加相关控件
-
设置密码编辑框的属性
登录功能的按钮实现,主界面的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类中添加该函数