Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Day от Декабрь 18, 2013, 22:49



Название: Qt::DeleteOnClose для всех
Отправлено: Day от Декабрь 18, 2013, 22:49
Логика моей задачи такова, что любой виджет я создаю по new, и по его закрытию он мне больше совершенно не нужен. Значит каждому надо писать
 
Код:
setAttribute(Qt::WA_DeleteOnClose, true);
Иногда я это могу забыть, что конечно чревато утечками памяти.
Нет ли глобального способа, на уровне QApplication, заставить все виджеты удаляться при их закрытии?


Название: Re: Qt::DeleteOnClose для всех
Отправлено: ammaximus от Декабрь 18, 2013, 23:46
Если любому объекту QObject назначать родителя, то при удалении родителя, удалятся и потомки. Флаги эти тоже работают через родителей, так что утечки памяти не будет, по завершению все удалится в любом случае. Если тебе критично освобождать память, группируй их в категории и назначай специальному родителю, которого удалишь. Вообще, конечно, проще ничего не забывать)


Название: Re: Qt::DeleteOnClose для всех
Отправлено: kambala от Декабрь 19, 2013, 00:23
можно создать наследников QWidget/QDialog, добавить туда этот атрибут в конструктор и везде в программе использовать эти унаследованные классы.


Название: Re: Qt::DeleteOnClose для всех
Отправлено: Day от Декабрь 19, 2013, 11:08
ammaximus, kambala, спасибо.
Просто мне казалось, что логичнее удалять виджеты (диалоги) после их использования и закрытия. Ну что ж поделаешь! Буду стараться следить.
А создавать класс из-за одного атрибута не очень хочется. Хотя, конечно, это вариант.