QDialog常用理解
? ? ? ? 對話框有模態和非模態兩種形式。非模態對話框的的行為和使用方法都類似于普通的窗口。模態對話框則有所不同,當模態對話框顯示時,其他窗口將全部進入非激活狀態,不能接受鍵盤和鼠標事件。
??????? 模態的方式又可以分為兩種,一種是對整個應用程序模態,這時它的出現將導致程序中的所有窗口失去響應;另一種是對窗口模態,這時僅僅會導致它所在的整個窗口樹失去響應。??
??????? 用下面的成員函數可將對話框設為模態:
void setModal(bool modal); // 設置對話框的模態性?????????當參數 model 為 true 時,對話框設為模態,否則設為非模態。如果設為模態,則默認是對整個應用程序模態的。
???????
?????? ? 要設為對窗口模態,則需要用以下函數:
void setWindowModality(Qt::WindowModality windowModality);?????????實際上它是從 QWidget 類繼承過來的一個成員函數,其中 Qt::WindowModality 是一個枚舉類型,有以下取值。
? ? ? ? ?1)Qt::NonModal:非模態。
? ? ? ? ?2)Qt::WindowModal:窗口模態。
? ? ? ? ?3)Qt::ApplicationModal:應用程序模態。
???????? 與模態性相關的成員函數還有以下兩個:
Qt::WindowModality windowModality() const; // 得到窗口的模態性 bool isModel() const; // 判斷窗口是否為模態的???????? 下面這個函數將以模態方式顯示對話框:
int exec(); // 這是一個槽????
???????? 同時它也是一個槽。這個函數不管對話框的模態性如何,總是顯示模態對話框。調用這個函數的代碼將阻塞直到對話框被關閉,返回值表示對胡框的結果。注意這個函數總是在其他窗口的代碼中調用,一般不在對話框自己的代碼中使用。
???????? 對話框的結果與下面的函數有關:
virtual void done(int r); // 關閉對話框并返回結果 r,這是一個槽。??????? 這時一個槽,它將使對話框關閉,使對 exec 函數的調用返回。參數 r 是整數值,但最好使用 QDialog::DialogCode 枚舉類型所定義的兩個值。
? ? ? ? 1)QDialog::Accepted:表示確定。
? ? ? ? 2)QDialog::Rejected:表示取消。
??????? 對話框通常有一個確定按鈕和一個取消按鈕,它們能使對話框關閉并返回相應的值。為了與按鈕的 clicked() 信號連接,需要用到以下的槽:
virtual void accept(); // 槽,等價于 done(QDialog::Accepted) virtual void reject(); // 槽,等價于 done(QDialog::Rejected)? ? ? ? ?下面這個函數將以對窗口模態的方式顯示對話框:
void open(); // 這是一個槽??????? 它也是一個槽。與 exec 函數不同的是,open 函數將立刻返回而不是等待對話框關閉。它一般用在需要顯示模態對話框但又要繼續進行工作的場合,比如一個進度對話框。這時候,需要在工作處理過程中間歇性地調用 QApplication 對象的 processEvents 成員函數,否則對話框的事件將的不到處理。
總結
以上是生活随笔為你收集整理的QDialog常用理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#NPOI导出2007版本excel
- 下一篇: cron引起inode节点用光的情况