2011-04-08 173 views
2

我只是在Mac上開始接觸Qt和合作,通過:Qt應用程序崩潰

http://doc.qt.nokia.com/4.7/gettingstartedqt.html

當我運行它具有以下代碼第二個例子:

#include <QtGui> 

int main(int argv, char **args) 
{ 
    QApplication app(argv, args); 

    QTextEdit textEdit; 
    QPushButton quitButton("Quit"); 

    QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); 

    QVBoxLayout layout; 
    layout.addWidget(&textEdit); 
    layout.addWidget(&quitButton); 

    QWidget window; 
    window.setLayout(&layout); 

    window.show(); 

    return app.exec(); 
} 

該應用程序啓動正常,工作正常。唯一的問題發生在我點擊「退出」按鈕時。當我這樣做時,崩潰記者被調用,osx說應用程序意外退出。

任何明顯的我做錯了?

感謝

回答

4

的問題是順序的,如果你在堆棧上聲明變量刪除。最好給它的對象父母,以便他們可以摧毀孩子。

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 

    QWidget window; 

    // If window get's destroyed, it will destroy it's children... 
    QTextEdit textEdit(&window); 
    QPushButton quitButton("Quit",&window); 

    QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); 

    QVBoxLayout layout; 
    layout.addWidget(&textEdit); 
    layout.addWidget(&quitButton); 

    window.setLayout(&layout); 

    window.show(); 

    return app.exec(); 
} 

PS:你真的試過一個調試器,看看它崩潰的地方嗎?它會給你一個想法;)我的建議是採取一個有效的Qt例子,並與它一起玩。

PS2:我創建的部件的順序也可以防止碰撞...

+0

完美的,非常感謝解釋。 – rainkinz 2011-04-08 15:39:30

0

嘗試:

QTextEdit * textEdit = new QTextEdit; 
QPushButton * quitButton = new QPushButton("Quit");