crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> убрать виджет с лайаута
ernie
  опции профиля:
сообщение 7.10.2010, 15:27
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Доброго времени суток господа.Вопрос такой:
Создается QVector,далее создаются нужные виджеты и помещаются в этот вектор,после этого нужные виджеты из вектора помещаются на лайаут.
В определённый момент надо удалить все виджеты с лайата и поместить туда снова(т.е. виджеты из того же вектора,некоторые остаются теми же,некоторые новые из этого же вектора),но тут то и возникает проблема,если делаю :
QLayoutItem *child;
    while ((child = dockLayout->takeAt(0))!=0)
    {
        QWidget *w=child->widget();
        delete child;
        dockLayout->removeWidget(w);
        delete w;
    }

то виджеты удаляются и в векторе,что в дальнейшем вызывает проблемы,если просто делаем removeWidget() для всех виджетов,то они так и продолжают отрисовываться,подскажите выход,заранее спасибо.
Причина редактирования: исправил опечатки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.10.2010, 15:42
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


ernie,
судя по доке
Цитата
void QLayout::removeWidget ( QWidget * widget )
Removes the widget widget from the layout. After this call, it is the caller's responsibility to give the widget a reasonable geometry or to put the widget back into a layout.

Note: The ownership of widget remains the same as when it was added.

See also removeItem(), QWidget::setGeometry(), and addWidget().

тебе владельца виджета сменить надо.
что даёт
void QLayout::removeItem ( QLayoutItem * item )
???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 7.10.2010, 15:48
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(kwisp)
тебе владельца виджета сменить надо.
Если точнее, то родителя нужно обнулить, т.к. layout его принудительно назначает. Тек же, возможно, придется скрыть виджет в ручную QWidget::hide ()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 7.10.2010, 16:07
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


igor_bogomolov,kwisp спасибо,обнуление родителя дало как раз то что надо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.3.2021, 20:38