目录
0. 前言
1. 登录界面的创建和设计
2. 子界面的创建与设计
3. 子界面的.cpp文件和.h文件的编写
4. 修改Main函数
5. 编译测试结果
本文代码部分参考这篇博文。
创建过程在前面博客中已经写过,这里贴出关键步骤图。
首先,关于基类的选择问题,参考这篇博文。此项目中,选择QDialog作为基类。
VS2019的项目中如下图所示。
双击进入QtLogin.ui(若进入后闪退,修改打开方式,具体操作参考我前面的博客),制作成如下图所示的界面,并在右侧明细栏内修改名称。
由于“登录“按键是启动另一个界面,所以需要自己定义槽函数;而”退出“按键是不需要的,因此先设置好”退出“按键的实现。在下侧”信号与槽“一栏中添加如下图所示的功能,它的意思是:当Exit_Btn按键被点击(clicked)后,QtLoginClass作为接收者,close()函数被调用,于是界面就会关闭。
右键VS2019的项目 — 添加 — 新建项
选择 Qt — Qt Widget Form File,修改名称为:ControlWindow.ui
此时会自动弹出该ui文件等待编辑。首先,修改该ui界面的名称为:ControlWindow
其次,由于这里只是实现点击登录后显示该子界面,所以子界面的设计不必太复杂,只添加布局中的Label即可,如下图所示。
在前文中,只是创建了子界面的ui文件,并没有创建子界面的.cpp文件和.h文件,所以这里需要手动创建。同样地,右键Qt项目 — 添加 — 新建项(直接改文件名,修改后缀即可)。此时VS2019项目中明细栏有如下文件:
第一,在ControlWindow.h文件内添加内容:
#pragma once
#include
#include "ui_ControlWindow.h"
class ControlWindow : public QWidget
{
Q_OBJECT
public:
ControlWindow(QWidget* parent = Q_NULLPTR);
private:
Ui::ControlWindow ui;
};
第二,在ControlWindow.cpp文件内添加:
#include "ControlWindow.h"
ControlWindow::ControlWindow(QWidget* parent)
: QWidget(parent)
{
ui.setupUi(this);
}
第三,在QtLogin.h中修改:
#pragma once
#include
#include "ui_Login.h"
class Login : public QDialog
{
Q_OBJECT
public:
Login(QWidget *parent = Q_NULLPTR);
private:
Ui::LoginClass ui;
public slots:
void on_clicked();
};
第四:在QtLogin.cpp中修改:
#include "Login.h"
#include "QMessageBox"
Login::Login(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
ui.Passport_Edit->setEchoMode(QLineEdit::Password); //让密码变成星号,无法显示
QObject::connect(ui.Sign_in_Btn, SIGNAL(clicked()), this, SLOT(on_clicked()));
}
void Login::on_clicked() {
if (ui.User_Edit->text() == tr("qt") && ui.Passport_Edit->text() == tr("123456"))
{
accept();
}
else
{
QMessageBox::warning(this, tr("warning!"), tr("username or passport is wrong!"), QMessageBox::Yes);
}
}
将main函数修改为:
#include "QtLogin.h"
#include
#include "ControlWindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtLogin w;
ControlWindow cw;
if (w.exec() == QDialog::Accepted) {
cw.show();
return a.exec();
}
}
上述代码的解释:
首先是w.exec()函数,这个函数代表循环等待,也就是等待用户的操作。
其次是QDialog::Accepted,表明只要对话框的按键被按下,就会发出accepted信号,从而if语句成立,执行if语句内的程序。
希望此部分是你自己测试出来的,略。