Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: andrew.k от Декабрь 12, 2011, 16:58



Название: создание Layout'ов
Отправлено: 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 не написано, что лейаут становится родителем при добавлении.
Кто же удаляет лейаут при удалении виджета?


Название: Re: создание Layout'ов
Отправлено: BRE от Декабрь 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();
 


Название: Re: создание Layout'ов
Отправлено: nn1317 от Декабрь 12, 2011, 17:47
странный вопрос от человека с 700+ сообщениями на форуме.


Название: Re: создание Layout'ов
Отправлено: andrew.k от Декабрь 12, 2011, 17:57
Я так и думал. Репарент происходит при добавлении лейаута.
Почему это не отражено в ассистанте? Что за дела.


Название: Re: создание Layout'ов
Отправлено: andrew.k от Декабрь 12, 2011, 17:58
странный вопрос от человека с 700+ сообщениями на форуме.
Потому что у меня не было этих 5 минут сегодня, а ответ хотелось узнать.
Не вижу ничего странного.


Название: Re: создание Layout'ов
Отправлено: twp от Декабрь 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.


Название: Re: создание Layout'ов
Отправлено: andrew.k от Декабрь 13, 2011, 11:56
Okay