1. 程式人生 > >QT模態對話方塊與非模態對話方塊

QT模態對話方塊與非模態對話方塊

模式對話方塊:在沒有關閉它之前,不能與同一個應用程式的其他視窗進行互動;比如新建專案時彈出的對話方塊。

非模式對話方塊:可以與其他視窗進行互動,比如查詢替換對話方塊。

舉例:

#include"mywidget.h"
#include "ui_mywidget.h"
#incldue<QDialog>

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

程式中指定dialog的父視窗為MyWidget物件,執行時發現一個視窗一閃而過,這是因為dialog只是一個在函式中定義的區域性變數,當函式結束的時候,dialog也消失。

程式可以修改如下:

(1)方法1:

QDialog *dialog=new QDialog(this);

dialog->show();  //dialog是指向QDialog類的一個指標變數。

顯示的對話方塊是非模態對話方塊。

(2)方法2:

QDialog dialog(this);

dialog.exec();

此時只有關閉這個對話方塊,MyWidget的窗口才能彈出來,所以叫做模態對話方塊。

總結:

要想使一個視窗成為模態對話方塊,只需要要呼叫它的的exec()函式,而想它成為非模態對話方塊,可以使用new來建立,用show()來顯示。

show()也可以建立模態的,只需要在其前面是用setModal()即可。如:

QDialog *dialog=new QDialog(this);
dialog->setModel(true);
dialog->show();