Название: полное удаление содержимого лайаута Отправлено: votan от Октября 16, 2009, 21:49 Здравствуйте, возникла проблема, при попытке удалить лайаут, удаляются виджеты а рамка которая отрисовывалась вокруг виджета остается на месте, как будто её отрисовали на главном виджете
есть такая иерархия лайутов: все лайауты типа QHBoxLayout и QVBoxLayout(кнопки) Layout: 1)ButtonsLayout a)addPonPushButton b)addChiPushButton c)addKanPushButton d)addPairPushButton e)deleteTailPushButton f)analyseHandPushButton 2)SetsLayout a)setLayout(0-4шт) *Chi/Pon/Kan/PairSetWidget *tileLayout *(от 2х до 4х) MyTileWidget(каждый покрашет в красный цвет по средством setStyleSheet("background-color: red");) Код: void Table::slotDeleteSet() на одной картинке показан мусор который остается после удаления, на другой структура лэйаутов Название: Re: полное удаление содержимого лайаута Отправлено: _OLEGator_ от Октября 16, 2009, 22:11 Для простоты понимания вопроса и ускорения решения проблемы рекомендую выложить минимальный проект, в котором присутствует проблемная часть.
Также если вы хотите понимать и разбираться в том, что написали, то надо хотя бы в ассистент заглядывать, потому что вот это Код избыточно repaint и update - вызывать достаточно одно из них, repaint вызовет немедленную перерисовку окна, а при update перерисовка вызовется, когда обработка перейдет в основной цикл рисования... Название: Re: полное удаление содержимого лайаута Отправлено: SLiDER от Октября 17, 2009, 01:18 Здравствуйте, возникла проблема, при попытке удалить лайаут, удаляются виджеты а рамка которая отрисовывалась вокруг виджета остается на месте, как будто её отрисовали на главном виджете Удаление лэйаута не приводит к удалению связанных с ним виджетов, ибо он не является (и не может быть, так как не является виджетом) их парентом. Название: Re: полное удаление содержимого лайаута Отправлено: votan от Октября 17, 2009, 19:39 спасибо за подсказку ;D
все решилось банально просто, просто проехать внутри каждого вложенного лэйаута с удалением всех виджетов Код: bool flag=true; Название: Re: полное удаление содержимого лайаута Отправлено: Alex Custov от Октября 18, 2009, 13:52 Удаление лэйаута не приводит к удалению связанных с ним виджетов, ибо он не является (и не может быть, так как не является виджетом) их парентом. ну здрасте :) Цитировать 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. Название: Re: полное удаление содержимого лайаута Отправлено: SLiDER от Октября 19, 2009, 23:20 Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it. [/quote]Забавный ноут ??? Как-то необращал раньше на него внимания. Однако, как тогда объяснить тот факт, что после удаления лэйаута удления положенных на него компонентов непроисходит? Надо почитать исходники ??? Насколько я помню, по Qt-шным правилам, своих детей удаляет родитель, а родителем виджету может быть только виджет, и мне казалось что лэйаут транслирует положенные на него виджеты в дети своего виджета. Странный ноут ??? Название: Re: полное удаление содержимого лайаута Отправлено: lit-uriy от Октября 19, 2009, 23:38 >>а родителем виджету может быть только виджет, и мне казалось что лэйаут транслирует положенные на него
>>виджеты в дети своего виджета. Если пытатся получить родителя виджетов лежащих в компоновщике, то возвращается именно виджет в который помещён данный компоновщик. Так что, я думаю, в доку вкралась ложная информация, либо неполная Название: Re: полное удаление содержимого лайаута Отправлено: pastor от Октября 20, 2009, 00:16 ну здрасте :) Да, итем удалится, но где сказано что удаляется имеено виджет? Название: Re: полное удаление содержимого лайаута Отправлено: Alex Custov от Октября 20, 2009, 00:54 Если пытатся получить родителя виджетов лежащих в компоновщике, то возвращается именно виджет в который помещён данный компоновщик. Так что, я думаю, в доку вкралась ложная информация, либо неполная да, всё верно, я сейчас точно проверил - если удалить layout, то занесённые в него виджеты не удаляются, запись в доке вносит небольшую сумятицу. |