Russian Qt Forum

Qt => Общие вопросы => Тема начата: Caduceus от Февраль 24, 2009, 22:53



Название: Что вызывается parent у детей перед смертью?
Отправлено: Caduceus от Февраль 24, 2009, 22:53
Делаю свой Виджет, унаследованный от GLWidget. Он висит на основном окне программы как ребенок. Мне когда программа закрывается - нужно чистить память. Попытался переопрелделить у виджета closeEvent - не помгло.

Как чистить память у виджета перед его смерьью?


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: pastor от Февраль 24, 2009, 22:59
Если я правильно понял вопрос, то:

1) delete glwidget;

или

2) glwidget->setAttribute(Qt::WA_DeleteOnClose);
    ...
    glwidget->close();


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Caduceus от Февраль 24, 2009, 23:08
Нет, не как удаляется виджет, а что шлется виджетам после окончания app.exec() , но до деструктора QApplication


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Rcus от Февраль 24, 2009, 23:16
Странный вопрос. Чем вас для начала не устраивает деструктор виджета?


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Caduceus от Февраль 24, 2009, 23:23
Тем, что в деструктор дебагер заходит после деструктора главного класса QApplication, а мне надо до


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: pastor от Февраль 24, 2009, 23:26
а что шлется виджетам после окончания app.exec()

Ничего не шлется


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Rcus от Февраль 24, 2009, 23:56
Хм, обычно главное окно создают на стеке после QApplication, может вы нам кода немножко покажете, без него телепатия очень плохо работает.


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Caduceus от Февраль 25, 2009, 00:53
Код почти обычный
Код:
        QApplication a(argc, argv);
InitMyLibrary();            //1
MyWnd w;
w.show();
int retVal = a.exec();
FreeMyLibrary();          //2
return retVal;

В строке 1 происходит инициализация моей библиотеки в строке 2 - освобождение . В главном окне есть виджет, в котором создаеются объекты классов из библиотки. Так вот при закртыии окна они должны убится  ДО вызова строки 2 - а они в деструткоре виджета удаляются после - что неправильно - вот я  испрашиваю - где мне внутри виджета убивать мои объекты


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: Rcus от Февраль 25, 2009, 01:09
попробуйте сделать так:
Код:
int retVal;
{
    MyWnd w;
    w.show();
    retVal = a.exec();
}


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: pastor от Февраль 25, 2009, 12:37
В строке 1 происходит инициализация моей библиотеки в строке 2 - освобождение . В главном окне есть виджет, в котором создаеются объекты классов из библиотки. Так вот при закртыии окна они должны убится  ДО вызова строки 2 - а они в деструткоре виджета удаляются после - что неправильно - вот я  испрашиваю - где мне внутри виджета убивать мои объекты

Удали главное окно "вручную":

Код
C++ (Qt)
QApplication a(argc, argv);
InitMyLibrary();            //1
MyWnd *w = new MyWnd();
w->show();
int retVal = a.exec();
delete w;
FreeMyLibrary();          //2
return retVal;


Название: Re: Что вызывается parent у детей перед смертью?
Отправлено: ритт от Март 02, 2009, 13:57
w->setAttribute(Qt::WA_DeleteOnClose);
при закрытии главного окна оно убьётся, затем //2, затем всеобщее разрушение...