2010-11-30 75 views
2

我正在使用Qt構建一個UI,我需要在主應用程序窗口之前出現一個對話窗口,以便用戶可以選擇一些文件來加載ans的東西像那樣。 我有什麼是一個相當簡單的主:Qt應用程序掛在退出(在QDialog exec後)

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    IView *view = new QtView(); 
    view->showView(); 
    int rc = a.exec(); 
    std::cout << "exit" << std::endl; 
    return rc; 
} 

的QtView類是具體實現的iView接口。 它也有主窗口實例和一個QDialog實例。詮釋查看 - > showView()方法,這是我的本錢:

void QtView::showView() 
{ 
    this->_configDialog->exec(); 
    this->_mainAppWindow->show(); 
} 

它工作正常,在對話框打開,當用戶點擊OK,出現EXEC回報和主窗口。問題是,當我離開主窗口時,我得到了一個殭屍進程,儘管所有的窗口都關閉了,但應用程序似乎仍然掛起,我從來沒有得到主要返回之前我打印出來的「退出」。 我不確定我做錯了什麼,但即使我點擊十字關閉對話框,主窗口打開,並且一旦關閉,整個事物就會掛在那裏,我得到相同的resutl。

如果有人有任何建議,那很酷。 謝謝。

回答

2

我固定我的問題。 我使用QDialog的接受/拒絕/完成(int)信號觸發主應用程序窗口上的顯示插槽,並在對話框被接受時顯示它。 感謝您的幫助。

0

我認爲這種行爲的可能原因是你的配置對話框可能沒有設置父窗口部件(這是一個盲目的猜測,因爲你還沒有引用代碼的相關部分)。這是因爲默認情況下QApplication只會在沒有父項的所有窗口都關閉時退出。而事實是,對話不是一個窗口,從技術上說 - 它具有Qt :: Dialog窗口類型而不是Qt :: Window。這意味着關閉的任何「孤立」對話框仍然會阻止應用程序自動退出。

解決方案? 要麼讓家長到對話框或啓用了Qt :: WA_QuitOnClose屬性:

this->_configDialog->setAttribute(Qt::WA_QuitOnClose); 
+0

它也不工作。如果我使用這個 - > _ configDialog-> show(),但是當我使用這個 - > _ configDialog-> exe(); 即使我在對話框上設置了父項,也沒有區別。應用程序終止的唯一方法是在我的主窗口上調用close()方法。 – dotminic 2010-11-30 23:36:11