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

来源:互联网 发布:提示软件license未授权 编辑:程序博客网 时间:2024/06/05 15:16

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

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

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

#include <QtGui/QApplication>#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 <QDialog>  // 包含头文件#include "mydialog.h"#include <QDebug>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之间的自由跳转

0 0