Qt 對話框QDailog及其類型


學習目的:

  Qt 對話框QDialog 學習。

  對話框是與用戶進行簡短交互的頂層窗口

   QDailog是Qt中所有對話框的基類

  QDailog繼承於QWidget是一種容器類型的組件

  

 

—— QDialog作為專用的交互窗口而存在

——QDialog不能作為子部件嵌入其它容器中

——QDialog其實就是定制了窗口樣式的特殊QWidget

實驗:QDialog與QWidget的區別

  測試代碼:

  

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    QDialog* dai = new QDialog(&w);//將QDialog 組件嵌入QWidget 中
    dai->setWindowTitle("this is Dialog");
    dai->show();
    w.setWindowTitle("this is Widget ");
    w.show();
    w.resize(100,120);
    dai->resize(100,120);
    return a.exec();
}

運行結果:

   

  運行上面代碼 將出現兩個對話框,也就證明了  QDialog不能作為子部件嵌入其它容器中。

 

對話框的類型:

 模態對話框(QDialog::exec())  用在必須依賴用戶選擇的場合,在棧上建立即可

  ——顯示后無法與父窗體進行交互

  ——是一種阻塞式的對話框嗲用方式

  非模態對話框(Dialog->show())    用在特殊功能設置的場合,需要在堆上創建,在棧上創建的不能一直顯示出來(需要指定Qt::WA_DeletteOnClose屬性,在結束對話框后刪除掉此對話框所使用的資源)

  ——顯示后獨立存在可以同時與父窗體進行交互

  ——是一種非阻塞式的對話框調用方式

  注: 可以通過QDialog::setModal函數可以創建混合特性的對話框。以非阻塞方式調用,但是是不可以操作父窗體的。

模態對話框實驗:

  1、建立一個Qdialog對象

  2、調用對象的exec();進入消息循環

代碼:

  

void Dialog::ModalBtn_Clicked()
{
    qDebug()<<"ModalBtn_Clicked() Begin";
//    QDialog* dialog = new QDialog(this);
//    dialog->exec();
    QDialog Dialog(this);
    Dialog.setWindowTitle("Modal Dialog");
    Dialog.exec();
    qDebug()<<"ModalBtn_Clicked() End";
}

運行結果:

  

 

 不能繼續操作父窗體。

  非模態對話框實驗:

  

void Dialog::NoremalBtn_Clicked()
{
    qDebug()<<"NoremalBtn_Clicked() Begin";
    QDialog* dialog = new QDialog(this);
    //Dialog dialog = new Dialog(this);
    dialog->setWindowTitle("Normoal Dialog");
    dialog->show();
    dialog->setAttribute(Qt::WA_DeleteOnClose);//關閉對話框自動刪除 dialog 對象
    qDebug()<<"NoremalBtn_Clicked() End";

}

運行結果:

  

 

 顯示后獨立存在可以同時與父窗體進行交互,是一種非阻塞式的對話框調用方式

 混合特性的對話框:

   

void Dialog::MixedBtn_Clicked()
{
    qDebug()<<"MixedBtn_Clicked() Begin";
     QDialog* dialog = new QDialog(this);
     dialog->setAttribute(Qt::WA_DeleteOnClose);//關閉對話框自動刪除 dialog 對象
     dialog->setModal(true);
     dialog->show();
    qDebug()<<"MixedBtn_Clicked() End";
}

 

對話框返回值:

  ——只有模態對話框才有返回值的概念,由於模態對話框是阻塞的

  ——模態對話框的返回值用戶表示交互結果

  QDialog::exec()的返回值為交互結果

  ——void Qdialog::done(int i) 關閉對話框將參數作為交互結果

  ——QDialog::Accepted  用戶操作成功

  ——Qdialog::Rejected   用戶操作失敗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM