对话框几种调用方式

随便新建一个主窗体

 

 再随便建一个对话框dialog

 

 

接下来在主函数中调用dialog

第一种:

#include "widget.h"
#include "dialog.h"
#include <QDebug>

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Dialog d;
    
    d.exec();

    qDebug()<<"看看走到了这里没有";

    return a.exec();
}

 

d.exec();

阻塞窗体,也阻塞代码,除非你点击确定或取消离开了dialog的界面,否则主窗体会一直阻塞

 

第二种:

#include "widget.h"
#include "dialog.h"
#include <QDebug>

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Dialog d;


    d.show();

    qDebug()<<"看看走到了这里没有";

    return a.exec();
}

 

d.show(); 

不阻塞窗体,也不会阻塞代码,即便不关闭这个dialog 后面原本程序内容也可以正常运行。

 

第三种:

#include "widget.h"
#include "dialog.h"
#include <QDebug>

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Dialog d;

    //模态
    d.setModal(true);
    d.show();

    qDebug()<<"看看走到了这里没有";

    return a.exec();
}

 

在调用dialog之前,先将其转为模态,不阻塞代码,但是阻塞窗体

如果设置为false,就是默认状态,和第二种情况相同。

 

 

可以调用accept()函数,结束exec()

先做一个简单的登陆界面

 

 然后给两个 push button 写上槽函数

void Dialog::on_pushButton_clicked()
{
    QString a = ui->lineEdit->text();
    QString b = ui->lineEdit_2->text();
    if(a == b)
    {
        accept();
    }
}

void Dialog::on_pushButton_2_clicked()
{
    close();
}

这里简单的写成当账号密码相等时登陆验证成功

 

接着再主函数中先创建窗体,这里对话框选择第一种,阻塞窗体也阻塞代码,这样再密码输入错误的时候就无法进入主窗体界面

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    Dialog d;


    if(d.exec() == QDialog::Rejected)
    {
        return 0;
    }

    Widget w;
    w.show();

    qDebug()<<"看看走到了这里没有";

    return a.exec();
}

 

可以在完善一下,加上对密码错误的判断

void Dialog::on_pushButton_clicked()
{
    QString a = ui->lineEdit->text();
    QString b = ui->lineEdit_2->text();
    if(a > 0 && a == b)
    {
        ui->label_3->setText(0);
        accept();
    }
    else if (a != b)
    {
        ui->label_3->setText("密码错误,请重新输入");
        ui->lineEdit->setText(0);
        ui->lineEdit_2->setText(0);
    }
}

如果密码错误,再一个label中提示密码错误,同时i清空两个lineEdit中的内容

 

接下来在主窗体中加入一个退出按钮,并且再点击该按钮后弹出一个对话框进行二次判断

 

 

 

 先给退出对话框写槽函数

void Quit::on_pushButton_clicked()
{
    reject();
}

void Quit::on_pushButton_2_clicked()
{
    accept();
}

两个按钮分别对应刚才的确认退出和取消退出。

reject() 返回值是QDialog::Reject  收到该信号后关闭对话框

accept() 返回值是 QDialog::Accept    保持原样同时结束exec()

 

所以在主窗体的退出按钮槽函数中

void Widget::on_pushButton_clicked()
{
    Quit q(this);
    if(q.exec() == QDialog::Rejected)
    {
        this->close();
    }

}

 

我们使用一下

故意输入错密码时,清空两个lineEdit,同时label提示

 

 

输入正确密码进入主窗体,

 

 点击取消 对话框消失

点击确定 退出整个程序

posted @ 2020-05-03 16:58  祁峰_1024  阅读(477)  评论(0编辑  收藏  举报