版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangxiaobei2017/article/details/78068641
对话框是用来提醒用户输入,分为模式对话框和非模式对话框;
模式对话框弹出后,之前的窗口被锁定,只有关闭对话框后,才能回到之前界面;(比较常见)
非模式对话框则可以同时操作前后两个窗口;
为了演示模式对话框,首先创建两个窗口,一个为带有登陆按钮的窗口,另一个是登陆界面如图:
第一个窗口的创建很简答,之前已经学习过,通过连接PushButton的信号与槽,建立联系;
重点在第二个窗口的创建,这个也是新学到的内容,右键点击解决方案,选择添加QT类,出现如下对话框,选择GUI类,进入下一个对话框
重命名,并且把父类改为QDialog,创建完成后,解决方案中会增加新的ui以及对应的头文件和cpp文件。此时可以创建第二个对话框,并设置属性。同时建立按钮的关联。
Qt7_1A.cpp
#include "Qt7_1A.h"
#include"LoginDlg.h" // 引用LoginDlg头文件
#include<QDebug> // 打印输出
Qt7_1A::Qt7_1A(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// 连接登陆按钮的信号与槽
connect(ui.btnLogin,SIGNAL(clicked()),
this, SLOT(OnBtnLogin()));
}
int Qt7_1A::OnBtnLogin() // 点击登陆按钮后,进入当前函数
{
// 使用对话框
LoginDlg dlg(this);
// 这里exce()函数要有一个返回值,要不然程序会堵塞
int ret = dlg.exec(); // exec()函数就是执行命令,弹出对话框
if (ret == QDialog::Accepted)
{
//取得用户输入
qDebug() << dlg.m_user << dlg.m_password;
}
else
{
}
return 0;
}
LoginDlg.cpp
#include "LoginDlg.h"
LoginDlg::LoginDlg(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
connect(ui.BtnOK, SIGNAL(clicked()), this, SLOT(OnBtnOK()));
connect(ui.BtnCancel, SIGNAL(clicked()), this, SLOT(OnBtnCancel()));
}
LoginDlg::~LoginDlg()
{
}
int LoginDlg::OnBtnOK()
{
//取得用户的输入
m_user = ui.EditUser->text();
m_password = ui.EditPassword->text();
accept(); // 关闭当前对话框,并使exce()函数返回Accepted
return 0;
}
int LoginDlg::OnBtnCancel()
{
reject();
return 0;
}