• 对话框几种调用方式


    随便新建一个主窗体

     再随便建一个对话框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提示

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

     点击取消 对话框消失

    点击确定 退出整个程序

  • 相关阅读:
    sublime text3安装package control插件图文教程
    conda创建新环境
    常用的vscode插件安装
    数组合并组合
    内核软死锁
    Ubuntu分区格式化并挂载新增磁盘方法
    Linux如何列出svn一个文件夹下的所有文件
    C++ UTF-8和GBK相互转化
    Linux shell如何用正则表达式匹配分组数据
    如何对接jsoncpp?
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12822500.html
Copyright © 2020-2023  润新知