2009-11-10 104 views
0

我和我的朋友都使用Qt 4創建了GUI的各個部分。它們都獨立工作,我試圖將他的窗體與我的主窗口集成。截至目前這是我正在使用的代碼來嘗試和加載他的表單:在Qt4中顯示兩個窗口

//connect buttons and such 
connect(exitbtn, SIGNAL(triggered()),this,SLOT(terminated())); 
connect(add, SIGNAL(triggered()),this,SLOT(add_rec())); 

void MainWindowImpl::add_rec() 
{ 
    //form quits as soon as it loads...? 
    DialogImpl dia;//name of his form 
    dia.show(); 
} 

我已經包含他的頭文件。該程序編譯,但當我觸發他的表格加載了大概半秒鐘,然後關閉。有誰知道我做錯了什麼?

+1

dia在add_rec的結尾會發生什麼?何時清理局部變量? – Bill 2009-11-11 18:58:29

+0

爲了擴大[這個答案](http://stackoverflow.com/a/1705583/594137),它是你熟悉C++而不是Qt,這是拋出你在這裏。我建議獲得一個[好書](http://stackoverflow.com/q/388242/594137),其中涵蓋了C++的基礎知識。 – 2012-01-30 13:30:01

回答

-2

顯然QT4一次只允許一個對象的實例,但指針是另一回事。同時更改的main.cpp 什麼都你的主窗口看起來是這樣的:

DialogImpl *dia=new DialogImpl; 
dia->show(); 
+1

這是錯誤的。問題是dia在函數結束時被破壞。 (Qt4絕對允許您一次有多個類的實例。) – Bill 2009-11-11 18:57:48

2

你有幾乎得到它的權利。這是因爲C++的RAII。如果你在棧上分配對話框,只要函數返回就會被破壞。

+1

將dia設置爲MainWindowImpl成員變量,並將其顯示在add_rec函數中。 – 2009-11-10 14:34:49

2

假設MainWindowImpl繼承公開從QWidget中,你看這個:

void MainWindowImpl::add_rec() 
{ 
    // passing "this" to the constructor makes sure dialog will be cleaned up. 
    // Note that DialogImpl will need a constructor that takes a 
    // QObject* parent parameter. 
    DialogImpl* dialog = new DialogImpl(this); 

    dialog->show(); 
} 

看那Qt documentation爲的構造應該如何看的例子。