|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.08.2012, 08:00 | #1 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Qt удаление потомков
хочу более подробно разобратся как удаляются потомки при удалении родительского виджета. В литературе описания этого процесса не встречал. Как можно самому такой класс написать(не в Qt)?
|
20.08.2012, 08:41 | #2 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Никогда не копался в исходниках кьюта, но общая идея очень простая: все потомки - наследники QWidget, поэтому у родителя есть список указателей на QWidget - список всех дочерних виджетов. В деструкторе просто вызывается delete для каждого элемента списка.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
20.08.2012, 14:42 | #3 | |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Цитата:
Как тут создать деструктор? Код:
Последний раз редактировалось SAMOUCHKA; 20.08.2012 в 14:56. |
|
20.08.2012, 15:16 | #4 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
А при чем здесь вообще наследование?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
20.08.2012, 15:24 | #5 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
ну вы же сами сказали у QWidget есть список всех дочерних виджетов, а если я свой создал.
к примеру я в главном окне распологал кнопки и виджет, который создал посредством наследования от QGLWidget. как он удаляется? или я что то не так понял? |
20.08.2012, 15:53 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Все конструкторы в Qt обычно могут получать указатель на родительский QObject - вероятно там и происходит регистрация дочерного объекта. Информация по памяти, могу и ошибаться.
|
20.08.2012, 16:31 | #7 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
да в качестве параметра, в конструктор, передается указатель this.
на как конкретно это делается? как мне самому реализовать такую технологию? |
20.08.2012, 17:32 | #8 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Дочерние виджеты - это понятие, никак не связанное с наследованием.
Пусть у нас есть виджет главного окна. Мы хотим расположить на нем различные элементы управления: надписи, кнопки, поля ввода, полосы прокрутки, картинки и т.п. Для этого мы создаем эти самые объекты, при этом указывая, что родителем будет именно этот виджет главного окна. Быть виджетом-родителем значит, что: а) дочерние виджеты располагаются внутри области родительского виджета (вы даже можете сделать кнопку достаточно больших размеров, а потом на ней как на родителе расположить другие кнопки, комбобоксы, надписи... хотя это уже извращение, но принципиально возможно и легко осуществимо); б) родитель управляет памятью своих дочерних виджетов - при его удалении он сам позаботится об удалении дочерних виджетов. Сделать один виджет родителем другого можно двумя с половиной способами: 1+1.5) явно указав это либо передав указатель на родительский виджет в конструкторе, либо позже, вызвав для него функцию-член setParent 2.5) добавив виджет, созданный без указания родителя, в лэйаут, а затем назначив этот лэйаут виджету-родителю функцией setLayout (тогда внутри этой функции тот просмотрит, кого же ему в этом лэйауте подсунули и, очевидно, для всех их вызовет функцию setParent, указав себя в качестве нового приемного родителя; однако, это все произойдет в недрах библиотеки без всякого вашего участия). Строго говоря, виджет может быть родителем не только других виджетов, но и любых объектов, унаследованных от QObject (например, сокеты, потоки, таймеры и другие) - равно как и объекты, унаследованные от QObject могут сами быть родителями. Многие такие объекты не являются элементами GUI (т.е. потомками QWidget) и поэтому отношения родитель-дочерний объект для них ограничиваются только пунктом б) - родитель уничтожает дочерние объекты в своем деструкторе. Как фараон.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление | ala | Свободное общение | 28 | 26.03.2021 15:44 |
Удаление RX | artemavd | БД в Delphi | 1 | 14.06.2009 19:24 |