首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除qtabwidget

删除qtabwidget
EN

Stack Overflow用户
提问于 2013-02-12 10:43:53
回答 2查看 2K关注 0票数 0

我的程序总是崩溃,返回代码为0。原因在我的qtabwidget中的某个地方,但我找不到错误。

代码语言:javascript
复制
 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,但只删除选项卡,这并不重要。程序仍然退出,返回代码为0。

EN

回答 2

Stack Overflow用户

发布于 2013-02-21 06:22:33

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-12 10:57:50

QApplication::quitOnLastWindowClosed设置为false。

代码语言:javascript
复制
#include <QApplication>

// ...

qApp->setQuitOnLastWindowClosed (false);

或者,您可以将选项卡(主窗口/主小部件)的容器设置为将Qt::WA_QuitOnClose属性设置为false。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14824603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档