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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Layout и Spacer надо ли удалять?  (Прочитано 4367 раз)
n4ela
Гость
« : Январь 31, 2010, 01:58 »

Если у Layout не задан родитель, то надо ли удалять его вручную?
А у QPaserItem вобще нельзя задать родителя, при разрушении объекта он сам удалится?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Январь 31, 2010, 02:14 »

А какой смысл от лайаута, если он некому не устанавливается?

Если  не задается парент, зачит всеравно где-то вызывается QWidget::setLayout и этот виджет будет следить за его удалением.
« Последнее редактирование: Январь 31, 2010, 02:16 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
n4ela
Гость
« Ответ #2 : Январь 31, 2010, 02:20 »

Ну например:
Код
C++ (Qt)
verticalLayoutMain = new QVBoxLayout( this );
verticalLayoutMain->addWidget( scrollArea );
horizontalLayoutButton = new QHBoxLayout();
horizontalSpacer = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
horizontalLayoutButton->addItem( horizontalSpacer );
horizontalLayoutButton->addWidget( addButton );
horizontalLayoutButton->addWidget( chancelButton );
verticalLayoutMain->addLayout( horizontalLayoutButton );

У horizontalLayoutButton который располагает кнопки внутри себя не задан родитель.
А спейсер прижимает их к нужному краю.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 31, 2010, 02:33 »

1) horizontalLayoutButton будет следить за спейсером и кнопками.
2) verticalLayoutMain будет следить за horizontalLayoutButton и scrollArea
3) а уж главный виджет будет следить за verticalLayoutMain

В ассистанте про все это написано:

Цитировать
void QLayout::addItem ( QLayoutItem * item )   [pure virtual]
Implemented in subclasses to add an item. How it is added is specific to each subclass.
This function is not usually called in application code. To add a widget to a layout, use the addWidget() function; to add a child layout, use the addLayout() function provided by the relevant QLayout subclass.
Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.


Цитировать
void QLayout::addWidget ( QWidget * w )
Adds widget w to this layout in a manner specific to the layout. This function uses addItem().
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
n4ela
Гость
« Ответ #4 : Январь 31, 2010, 02:39 »

Спасибо, теперь понятно.
А получается что даже если кнопки создаются без родителей ( chancelButton = new QPushButton() ) но привязаны к layout, при разрушение layout, память из под кнопок то же очистится?

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Январь 31, 2010, 02:42 »

да
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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