Удаление виджета за ненадобностью. |
Здравствуйте, гость ( Вход | Регистрация )
Удаление виджета за ненадобностью. |
edwardoid |
14.6.2011, 12:17
Сообщение
#1
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть объект QMdiArea в котором несколько окон( класс MDIChild наследует QMdiSubWindow). Проблема в том, что чем больше оконо я открываю( создаю экземпляры MDIChild) тем больше памяти выделяется(очевидно). Но когда закрываю окна, память не высвобождается. Судя по всему Qt оставляет удаление да потом, когда все прилжение закрывать понадобится. Так мне не надо. Потому как постоянно память выделяется и остается занятой, хотя сами объекты не нужны совсем.
Вопрос: Как освободить ненужную память? |
|
|
RazrFalcon |
14.6.2011, 12:56
Сообщение
#2
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Цитата When you create your own subwindow, you must set the Qt::WA_DeleteOnClose widget attribute if you want the window to be deleted when closed in the MDI area. If not, the window will be hidden and the MDI area will not activate the next subwindow. Оно?Ну или в деструкторе:
|
|
|
edwardoid |
14.6.2011, 13:17
Сообщение
#3
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
По ходу да, только все равно обычный Task manager все равно показывает старое значение занятой памяти.
|
|
|
silver47 |
14.6.2011, 13:25
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
mdiChild1->deleteLater(); - недостаточно. Деструктор не будет вызван. Необходимо в конструкторе класса напрямую указать:
Сообщение отредактировал silver47 - 14.6.2011, 13:25 |
|
|
RazrFalcon |
14.6.2011, 14:47
Сообщение
#5
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
|
|
|
edwardoid |
14.6.2011, 15:56
Сообщение
#6
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понимаю ваше удивление, увы сейчас мне верить нечему кроме как ТМ.
|
|
|
Litkevich Yuriy |
14.6.2011, 16:08
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
silver47 |
15.6.2011, 4:59
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Это почему? Не знаю. Пробовал делать так, деструктор не вызывался сразу после закрытия окна. А вот если поставить флаг удалять виджет сразу после закрытия - то деструктор вызывается сразу же после закрытия. В общем, по итогам: или флаг Qt::WA_DeleteOnClose или ручками delete %Имя виджета% |
|
|
Litkevich Yuriy |
15.6.2011, 6:06
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Деструктор вызовется при возвращении в цикл обработки событий, см. доку по QObject::deleteLater()
|
|
|
edwardoid |
15.6.2011, 13:34
Сообщение
#10
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как посмотреть сколько места нимает каждый объект в RAM? Как проверить на прожорливость программу?
Как посмотреть сколько места нимает каждый объект в RAM? Как проверить на прожорливость программу? |
|
|
Текстовая версия | Сейчас: 30.12.2024, 21:57 |