關於QT 中 QDialog的幾點,exec show(ZZ)

http://blog.163.com/modingfa_002/blog/static/11092546620108810047146/

1.如果使用exec()默認爲模態的。如果用show()需要設置setModel(true)纔是模態的。

2.當刪除一個dialog對象時,exec()返回QDialog::Rejected,因此在刪除dialog時要特別小心。舉例說明一下:

A 是一個QWidget 。B是一個QDialog,B = new QDialog(A)。
    int rec = B->exec();
    if (!thisDeleted)
    {
        if (rec == QDialog::Accepted)
            emit endSession();

    if (rec == QDialog::Rejected)
            emit endSession2();   

}

endSession()和 endSession2()都是A得成員函數。當刪除A時,B也會刪除(因爲B得parent是A),這個時候exec()會返回 QDialog::Rejected,此時下面的 emit endSession2()還會繼續執行,這個時候就會出現端錯誤了,因爲A比B先刪除,而此時還要調用A的成員,A都被刪除了,還能調用其成員函數?要 是能調用就奇了怪了。因此在類A中多了個靜態變量thisDeleted,記得在析構A的時候把這個值改變了,這樣就不會在調用emit endSession2(),也就不會出現段錯了。

3.exec()是一個循環時間函數,哪它什麼時候才能返回了?當調用 accept()(返回QDialog::Accepted), reject()(返回QDialog::Rejected),done(int r)(返回r),close()(返回QDialog::Rejected),hide()(返回 QDialog::Rejected),destory()(返回QDialog::Rejected)。還有就是delete 自己的時候也會返回 QDialog::Rejected(destory()就會delete自己)。

4.close()會銷燬對象嘛。答案是隻有當設置了 setAttribute(WA:closeOnDelelte)是纔會刪除,如果這個標誌沒有設置,其作用和hide(),setvisible(false)一樣,只會隱藏改對象。

5.當dialog在exec()時候。後臺線程同樣可以操作界面,如收到每個消息,還可以彈出QDialog。

發佈了0 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章