удалить 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 () используется несколько раз. Старый вкладок уничтожен, а новый создан.
Не имеет значения, если я не удаляю вкладку, а удаляю только вкладки. Программа по-прежнему завершается с кодом возврата 0.

0

Решение

Ты звонишь free(layout_tabs) но вы выделяете это с operator new(), Вы должны освободить его с delete layout_tabs вместо. Я не понимаю, как ваш window переменная выделена, но вы должны проверить, если она тоже должна быть освобождена operator delete()или если ваш QTabWidget владеет своей памятью (т.е. отвечает за управление этой памятью).

1

Другие решения

Установить QApplication::quitOnLastWindowClosed ложно.

#include <QApplication>

// ...

qApp->setQuitOnLastWindowClosed (false);

Или вы можете пойти и установить контейнер для ваших вкладок (главное окно / главный виджет), чтобы иметь свойство Qt::WA_QuitOnClose установить в ложь.

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

По вопросам рекламы [email protected]