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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: создание Layout'ов  (Прочитано 3246 раз)
andrew.k
Гость
« : Декабрь 12, 2011, 16:58 »

Посмотрел сгенеренный код виджета.
И обнаружил.
Код
C++ (Qt)
verticalLayout = new QVBoxLayout(widget);
       verticalLayout->setSpacing(0);
       verticalLayout->setContentsMargins(0, 0, 0, 0);
       verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
       horizontalLayout = new QHBoxLayout();
       horizontalLayout->setSpacing(6);
...
       verticalLayout->addLayout(horizontalLayout);
 
 
Т.е. основной лейаут виджета создается с парентом, а дополнительные создаются без родителя?
в документации к addLayout не написано, что лейаут становится родителем при добавлении.
Кто же удаляет лейаут при удалении виджета?
Записан
BRE
Гость
« Ответ #1 : Декабрь 12, 2011, 17:17 »

Код
C++ (Qt)
verticalLayout = new QVBoxLayout(widget);
       verticalLayout->setSpacing(0);
       verticalLayout->setContentsMargins(0, 0, 0, 0);
       verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
       horizontalLayout = new QHBoxLayout();
       horizontalLayout->setSpacing(6);
...
       verticalLayout->addLayout(horizontalLayout);
 
       // Посмотри кто здесь стал parent'ом для horizontalLayout, вот именно он его удалит. :)
       qDebug() << horizontalLayout->parent();
 
Записан
nn1317
Гость
« Ответ #2 : Декабрь 12, 2011, 17:47 »

странный вопрос от человека с 700+ сообщениями на форуме.
Записан
andrew.k
Гость
« Ответ #3 : Декабрь 12, 2011, 17:57 »

Я так и думал. Репарент происходит при добавлении лейаута.
Почему это не отражено в ассистанте? Что за дела.
Записан
andrew.k
Гость
« Ответ #4 : Декабрь 12, 2011, 17:58 »

странный вопрос от человека с 700+ сообщениями на форуме.
Потому что у меня не было этих 5 минут сегодня, а ответ хотелось узнать.
Не вижу ничего странного.
Записан
twp
Гость
« Ответ #5 : Декабрь 13, 2011, 11:27 »

вызов addLayout и addWidget в итоге сводится к вызову
Код
C++ (Qt)
void QLayout::addItem ( QLayoutItem * item )
 
на счет этого написано в асистенте
Цитировать
Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.
Записан
andrew.k
Гость
« Ответ #6 : Декабрь 13, 2011, 11:56 »

Okay
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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