我的程序一直在使用返回码0崩溃。 原因在我的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 :(得分:1)
您致电free(layout_tabs)
但是您使用operator new()
进行分配。您应该使用delete layout_tabs
取消分配它。我没看到你的window
变量是如何分配的,但你应该检查它是否也应该用operator delete()
解除分配,或者你的QTabWidget
拥有它的内存(即它是否负责管理那段记忆。)
答案 1 :(得分:0)
将QApplication::quitOnLastWindowClosed
设为false。
#include <QApplication>
// ...
qApp->setQuitOnLastWindowClosed (false);
或者您可以设置标签的容器(主窗口/主窗口小部件),使Qt::WA_QuitOnClose
的属性设置为false。
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