delete qtabwidget

delete qtabwidget

本文关键字:qtabwidget delete      更新时间:2023-10-16

我的程序不断崩溃,返回代码为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()函数被使用了几次。旧的选项卡小部件将被销毁,并创建一个新的。如果我不删除选项卡小部件,而只删除选项卡,那也没关系。程序仍然退出,返回代码为0。

您调用free(layout_tabs),但使用operator new()进行分配。您应该使用delete layout_tabs解除分配它。我不知道window变量是如何分配的,但您应该检查它是否也应该与operator delete()解除分配,或者您的QTabWidget是否拥有其内存(即,它是否负责管理该内存)。

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-道具

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