Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ убрать виджет с лайаута

Автор: ernie 7.10.2010, 15:27

Доброго времени суток господа.Вопрос такой:
Создается 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

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

Цитата(kwisp)
тебе владельца виджета сменить надо.
Если точнее, то родителя нужно обнулить, т.к. layout его принудительно назначает. Тек же, возможно, придется скрыть виджет в ручную QWidget::hide ()

Автор: ernie 7.10.2010, 16:07

igor_bogomolov,kwisp спасибо,обнуление родителя дало как раз то что надо.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)