簡體   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