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