2014-05-11 54 views
1

我有一個簡單的程序,我不記得如何在同一個程序中使用多個UI類型的類。我有MainWindow類,它有一個按鈕,它打開Browser類。這些類是幾乎其默認值,這是我用來打開Browser類UI:在Qt中使用多個Ui和Ui類?

void MainWindow::on_pushButton_2_clicked() 
{ 
    this->hide(); 
    Browser browser; 
    browser.show(); 
} 

構造在Browser簡單ui->setupUi(this)

會發生什麼情況是Browser窗口打開,然後立即關閉。

+0

請不要使用'這 - >'過度。 – lpapp

回答

2

,因爲我認爲它不是模態您可以創建堆上的瀏覽器,即:

Browser* browser=new Browser(this); 
browser->show(); 

+1

我想這是一種模式,因爲它擺脫了其他窗口,但我認爲它是非模態的,就好像其他窗口在那裏,它仍然可以訪問。這是對Qt模態的正確理解嗎? – JVE999

+0

是的你是對的。 – user2672165

+1

@ JVE999和user2672165:Fwiw,「你需要」的答案是不正確的......這是一個選項,但不止這一個選項。此外,澄清問題更適合於評論,所以最好把這些東西放在那裏,或者在你的答案中寫上一句話「提供......」等。 – lpapp

1

這是因爲你在堆棧上分配瀏覽器對象,然後它在函數結束時立即被銷燬。

void MainWindow::on_pushButton_2_clicked() 
{ 
    hide(); 
    Browser browser; // <--- constructed 
    browser.show(); 
}     // <--- destructed 

你有兩個選擇來解決它:

  • 使它成爲一個堆對象與「此」爲父。這將確保該對象在函數結束時不被銷燬,但不會因爲父對象被銷燬而被泄漏,而且Qt父/子層次結構也會自動銷燬對象。

    void MainWindow::on_pushButton_2_clicked() 
    { 
        hide(); 
        Browser *browser = new Browser(this); 
        browser->show(); 
    }   
    
  • 使其成爲類成員。這將超過功能的範圍,所以它會沒事的。

    void MainWindow::on_pushButton_2_clicked() 
    { 
        hide(); 
        m_browser.show(); 
    }