2013-02-12 4 views
0

моя программа продолжает сбой с кодом возврата 0. Причина в моем qtabwidget, но я не могу найти ошибку.delete 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.

ответ

0

Установите QApplication::quitOnLastWindowClosed на false.

#include <QApplication> 

// ... 

qApp->setQuitOnLastWindowClosed (false); 

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

myWidget->setAttribute(Qt::WA_QuitOnClose, false); 

Любой из них должен исправить это. Также возвращение с «0» не является крахом. Zero обычно указывает на нормальный выход.

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

Спасибо за ваш ответ. Возможно, я забыл упомянуть, что основные окна не закрываются. Закладка - отдельное окно для отображения результатов расчета. Когда я заканчиваю свою программу, закрывая главное окно, программа «сбой с кодом возврата 0», как говорит kdevelop. Так что это не совсем «нормальный конец», как говорит kdevelop. –

+0

начался с командной строки, он говорит: ошибка сегментации –

+0

ok Я решил проблему. Я должен использовать layout_tabs = new QTabWidget (0) (не QTabWidget()!) В конструкторе, а не удалять tabwidget больше, удалять только вкладки. –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^