QDialog对话框的show和exec

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

  • show:显示一个非modal的对话框,控制权立刻返回给调用函数,弹出窗口是否为model对话框,可由modal值决定。
  • exec:显示一个modal的对话框,并且锁住程序,直到用户关闭对话框为止,函数返回一个DialogCode结果。在对话框弹出期间,用户不可切换至其他窗口。

  mydialog.h如下:

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>

namespace Ui {
    class MyDialog;
}

class MyDialog : public QDialog {
    Q_OBJECT
public:
    explicit MyDialog ( QWidget *parent = 0 );
    ~MyDialog();
private slots:
    void on_pushButton_clicked();
private:
    Ui::MyDialog *ui;
};

#endif // MYDIALOG_H

  mywidget.h如下:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
    class MyWidget;
}

class MyWidget : public QWidget {
    Q_OBJECT
public:
    explicit MyWidget ( QWidget *parent = 0 );
    ~MyWidget();
private:
    Ui::MyWidget *ui;
public slots:
    void on_showChildButton_clicked();
private slots:
    void on_pushButton_clicked();
};

#endif // MYWIDGET_H

  mydialog.cpp如下:

#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();
}

  mywidget.cpp如下:

#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 dlg; /* 新建MyDialog对象 */

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

  main.cpp如下:

#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; /* 否则,退出程序 */
    }
}

在这里插入图片描述
  对于QDialogaccept函数和reject函数,这两个函数都能够隐藏QDialog。但是返回的值不同,一个是Accepted,一个是Rejected。通过返回值可以区分用户按下的是OK按钮,还是Cancel按钮。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值