QDialog对话框中show()和exec()

QDialog继承自QWitget,自然从基类继承了一个显示函数show(),然而QDialog自己还提供了一个特殊的显示函数exec(),二者的区别如下:

show();
显示一个非modal的对话框,控制权立刻返回给调用函数,弹出窗口是否是model对话框,可由modal值决定。

exec();
显示一个modal的对话框,并且锁住程序 直到用户关闭对话框为止,函数返回一个DialogCode结果。在对话框弹出期间,用户不可切换其他窗口。

#include 
#include "mywidget.h"
#include "mydialog.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    MyDialog dialog; //新建MyDialog类对象
    if(dialog.exec()==QDialog::Accepted){ //判断dialog执行结果
        w.show();    //如果是按下了“进入主界面”按钮,则显示主界面
        return a.exec(); //程序正常运行
    }
    else return 0;   //否则,退出程序
}
#include "mydialog.h"
#include "ui_mydialog.h"

MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyDialog)
{
    ui->setupUi(this);
}

MyDialog::~MyDialog()
{
    delete ui;
}

void MyDialog::on_pushButton_clicked()
{
    accept();
}
#include "mywidget.h"
#include "ui_mywidget.h"
#include   // 包含头文件
#include "mydialog.h"
#include 

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}

MyWidget::~MyWidget()
{
    delete ui;
}

// 显示子窗口按钮
void MyWidget::on_showChildButton_clicked()
{
    QDialog *dialog = new QDialog(this);
    dialog->show();
}

// 重新登录按钮
void MyWidget::on_pushButton_clicked()
{
    // 先关闭主界面,其实是隐藏起来了,并没有真正退出
    close();

    // 新建MyDialog对象
    MyDialog dlg;

    // 如果按下了“进入主窗口”按钮,则再次显示主界面
    // 否则,因为现在已经没有显示的界面了,所以程序将退出
    if(dlg.exec()== QDialog::Accepted) show();

}

依靠exec的返回值 完成在dialog和widget之间的自由跳转

你可能感兴趣的:(C++-GUI-Qt)