【问题标题】:delete qtabwidget删除 qtabwidget
【发布时间】:2013-02-12 02:43:52
【问题描述】:

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

【问题讨论】:

    标签: c++ qt4.8 qtabwidget


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 感谢您的回答。也许我忘了提到主窗口没有关闭。选项卡窗口是一个单独的窗口,用于显示计算结果。当我通过关闭主窗口退出程序时,正如 kdevelop 所说,程序“以返回码 0 崩溃”。因此,这并不是 kdevelop 所说的真正的“正常结束”。
      • 好的,我解决了这个问题。我应该在 de 构造函数中使用 layout_tabs = new QTabWidget(0) (不是 QTabWidget() !),不再删除 tabwidget,只删除选项卡。
      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2012-01-22
      • 2019-12-12
      相关资源
      最近更新 更多