0

我的程序不断崩溃,返回码为 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 退出。

4

2 回答 2

1

你打电话free(layout_tabs),但你用operator new(). 您应该delete layout_tabs改为取消分配它。我看不到你的window变量是如何分配的,但你应该检查它是否也应该被释放operator delete(),或者你是否QTabWidget拥有它的内存(即它是否负责管理该内存)。

于 2013-02-20T22:22:32.777 回答
0

设置QApplication::quitOnLastWindowClosed为假。

#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

于 2013-02-12T02:57:49.767 回答