2013-02-12 82 views
0

我的程序不断崩溃返回代码0. 原因是在我qtabwidget的某处,但我找不到错误。删除qtabwidget

QTabWidget *layout_tabs; 

// create tabs 
void myclass::fill_tabs(void) 
{ 
    kill_tabs(); // remove old tabs 
    layout_tabs = new QTabWidget(); 

    // program adds content into a few tabs, like: 
    // widgets created, content created, put into layout, put into widget.. 
    layout_tabs->addTab(widget, "description"); 
    layout_tabs->addTab(widget2, "description2"); 

    layout_tabs->show(); 
} 

void myclass::kill_tabs(void) 
{ 
    if(layout_tabs==nullptr) 
    return; 
    layout_tabs->hide(); 

    QWidget *window; 

    for (int i=layout_tabs->count()-1; i>=0; --i) 
    { 
     window = layout_tabs->widget(i); // remember widget 
     layout_tabs->removeTab(i); // remove tab 
     free(window); // remove widget 
    } 

    free(layout_tabs); // remove qtabwidget 
    layout_tabs=nullptr; 
} 

filltabs()函数被使用了几次。旧的tabwidget被销毁并创建一个新的。 不要紧,如果我不删除tabwidget,但只删除选项卡。该程序仍然退出,返回代码为0.

回答

0

QApplication::quitOnLastWindowClosed设置为false。

#include <QApplication> 

// ... 

qApp->setQuitOnLastWindowClosed (false); 

或者你可以去设置你的标签(主窗口/主窗口部件)的容器有Qt::WA_QuitOnClose一套假的财产。

myWidget->setAttribute(Qt::WA_QuitOnClose, false); 

其中之一应该修复它。也以“0”返回不是崩溃。零通常表示正常退出。

http://qt-project.org/doc/qt-4.8/qapplication.html#quitOnLastWindowClosed-prop

http://qt-project.org/doc/qt-4.8/qt.html#WidgetAttribute-enum

+0

感谢您的回答。也许我忘了提及主窗口没有关闭。该窗口是显示计算结果的单独窗口。当我通过关闭主窗口退出程序时,kdevelop说,程序'返回代码为0'。所以它不是一个真正的'正常结束',因为kdevelop另有说法。 – 2013-02-12 03:24:42

+0

从命令行启动它说:分割错误 – 2013-02-12 05:07:11

+0

好的我解决了这个问题。我应该在de构造函数中使用layout_tabs = new QTabWidget(0)(不是QTabWidget()!),而不是删除tabwidget,只删除选项卡。 – 2013-02-12 23:13:02

1

你叫free(layout_tabs)但你operator new()分配它。您应该用delete layout_tabs取消分配它。我看不到您的window变量是如何分配的,但您应该检查它是否应该用operator delete()解除分配,或者您的QTabWidget拥有其内存(即是否负责管理该内存)。