1. 程式人生 > >Qt 模態和非模態視窗的建立與關閉

Qt 模態和非模態視窗的建立與關閉

  首先應該明確的是,不僅僅Qt中包含模態視窗和非模態視窗,任何一個視窗介面開發的工具都應該具備此項功能。   模態視窗最簡單的理解是在模態視窗開啟之後,使用者只能與這個視窗進行互動,而在其關閉之前不能與其他視窗進行互動;而非模態視窗與之相反,雖然它被打開了,但是使用者仍然能對其他視窗進行互動。 下面來看看建立模態和非模態視窗的示例:(ResDialog是新視窗的類) 一. 模態: 1.指標的方法:
  • ResDialog*resdlg=newResDialog(this); 
  • this->hide();  //把之前的視窗隱藏
  • resdlg->setModal(true);
  • resdlg->exec(); 
  exec()和show()的區別在於,exec()顯示的是模式對話方塊,並且鎖住程式直到使用者關閉該對話方塊為止,也就是你只能操作這個對話方塊,除非關掉,否則無法操作別的對話方塊。而show就是簡單顯示,別的對話方塊也可以用,經常用於非模態對話方塊的建立中。 2.非指標的方法:
  • ResDialogresdlg; 
  • resdlg.setModal(true)  //設定為模態
  • resdlg.exec();  
二.非模態:
  • ResDialog*resdlg=newResDialog(this); 
  • this->hide();  //把之前的視窗隱藏
  • resdlg->show();  //
    ,只顯示resdlg視窗
或者:
  • ResDialogresdlg; //不用指標
  •  resdlg.setModal(false);
  •  resdlg.show();
你會發現非模態用的是show(); 關閉一個對話方塊往往用的是reject和accept。 還是一樣:
  • ResDialogresdlg; 
  •   int res= resdlg.exec();
  •   if (res ==QDialog::Accepted){
  •          QMessageBox::about(NULL"提示", 您點選了OK按鈕!");
  •   } 
  •   if (res ==QDialog::Rejected){    
  •         QMessageBox::about(NULL,"提示", 您點選了關閉按鈕!");
  •        //新增關閉時你要的行為
  • }
  對於模態視窗,exec()函式的返回值是代表了那個按鈕使模態會話框關閉,所以在此基礎上就可以根據不同的按鈕來確定不同的行為。