1. 程式人生 > >模式對話方塊和非模式對話方塊、accept()函式、exec()函式,Accepted訊號區別

模式對話方塊和非模式對話方塊、accept()函式、exec()函式,Accepted訊號區別

一.非模式對話方塊
  非模式對話方塊是和同一個程式中其它視窗操作無關的對話方塊。在字處理軟體中查詢和替換對話方塊通常是非模式的來允許同時與應用程式主視窗和對話方塊進行互動。呼叫show()來顯示非模式對話方塊。show()立即返回,這樣呼叫程式碼中的控制流將會繼續。
  非模式對話方塊,說白了,就像你打開了好幾個QQ聊天視窗,每個聊天視窗都是一個非模式對話方塊,想和誰聊和誰聊,只要點選那個視窗就可以輸入聊天資訊進行傳送了。

二.模式對話方塊

   模式對話方塊就是阻塞同一應用程式中其它可視視窗的輸入的對話方塊:使用者必須完成這個對話方塊中的互動操作並且關閉了它之後才能訪問應用程式中的其它任何視窗。模式對話方塊有它們自己的本地事件迴圈。用來讓使用者選擇一個檔案或者用來設定應用程式引數的對話方塊通常是模式的。呼叫exec()來顯示模式對話方塊。當用戶關閉這個對話方塊,exec()將提供一個可用的返回值並且這時流程控制繼續從呼叫exec()的地方進行。通常,我們連線預設按鈕,例如“OK”到accept()槽並且把“Cancel”連線到reject()槽,來使對話方塊關閉並且返回適當的值。另外我們也可以連線done()槽,傳遞給它Accepted或Rejected。

我希望在子視窗介面上做一個按鍵,一旦按下,子視窗介面消失,進入主視窗中。(QT教程與軟體裡面的第二章)


1、

void LoginDialog::on_pushButton_clicked()
{
    accept();
}

accept()的作用是:是槽函式。其作用是將當前的視窗隱藏(這樣就做到子視窗功能消失這個功能),並且傳送accepted訊號。

2、

LoginDialog dlg;   //建立一個指向子視窗的物件
dlg.exec();    //my1.exec()的意思是:執行模式對話方塊。按照之前對模式對話方塊的講述,
               //my1.exec()的意思就是,顯示子視窗,並在這裡阻塞住,直到該視窗被關閉之後
               //(隱藏也可以),才繼續往下執行!
w.show();//顯示主對話方塊