Russian Qt Forum
Ноябрь 25, 2024, 15:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Что вызывается parent у детей перед смертью?  (Прочитано 6074 раз)
Caduceus
Гость
« : Февраль 24, 2009, 22:53 »

Делаю свой Виджет, унаследованный от GLWidget. Он висит на основном окне программы как ребенок. Мне когда программа закрывается - нужно чистить память. Попытался переопрелделить у виджета closeEvent - не помгло.

Как чистить память у виджета перед его смерьью?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Февраль 24, 2009, 22:59 »

Если я правильно понял вопрос, то:

1) delete glwidget;

или

2) glwidget->setAttribute(Qt::WA_DeleteOnClose);
    ...
    glwidget->close();
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Caduceus
Гость
« Ответ #2 : Февраль 24, 2009, 23:08 »

Нет, не как удаляется виджет, а что шлется виджетам после окончания app.exec() , но до деструктора QApplication
Записан
Rcus
Гость
« Ответ #3 : Февраль 24, 2009, 23:16 »

Странный вопрос. Чем вас для начала не устраивает деструктор виджета?
Записан
Caduceus
Гость
« Ответ #4 : Февраль 24, 2009, 23:23 »

Тем, что в деструктор дебагер заходит после деструктора главного класса QApplication, а мне надо до
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Февраль 24, 2009, 23:26 »

а что шлется виджетам после окончания app.exec()

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Rcus
Гость
« Ответ #6 : Февраль 24, 2009, 23:56 »

Хм, обычно главное окно создают на стеке после QApplication, может вы нам кода немножко покажете, без него телепатия очень плохо работает.
Записан
Caduceus
Гость
« Ответ #7 : Февраль 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 - а они в деструткоре виджета удаляются после - что неправильно - вот я  испрашиваю - где мне внутри виджета убивать мои объекты
Записан
Rcus
Гость
« Ответ #8 : Февраль 25, 2009, 01:09 »

попробуйте сделать так:
Код:
int retVal;
{
    MyWnd w;
    w.show();
    retVal = a.exec();
}
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Февраль 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;
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #10 : Март 02, 2009, 13:57 »

w->setAttribute(Qt::WA_DeleteOnClose);
при закрытии главного окна оно убьётся, затем //2, затем всеобщее разрушение...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 23.