繁体   English   中英

删除qtabwidget

[英]delete qtabwidget

我的程序不断崩溃,返回码为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被创建。 如果我不删除tabwidget,而仅删除选项卡,则没有关系。 该程序仍然以返回码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-prop

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM