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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Как удалить Widget из layout'а  (Прочитано 16590 раз)
Exproment
Гость
« : Декабрь 19, 2011, 00:46 »

подскажите... Как правильно программно удалять виджеты из лайаута Непонимающий Почему код:
Код
CAD DCL
QLayout* layout = ui.scrollAreaWidgetContents->layout();
for(int i = 0; i < layout->count(); ++i)
{
QLayoutItem* item = layout->itemAt(i);
if(item)
{
layout->removeItem( item );
QWidget* widget = item->widget();
if(widget)
{
layout->removeWidget(widget);
delete widget;
}
delete item;
}
}
 
Удаляет только четные виджеты ?(если код выполнить несколько раз то все нормально удалится 0_о) и почему функция layout->takeAt(0) возвращает 0 при полном лайауте Непонимающий никак не разберусь  Грустный
« Последнее редактирование: Декабрь 19, 2011, 03:23 от Exproment » Записан
andrew.k
Гость
« Ответ #1 : Декабрь 19, 2011, 01:48 »

Код
C++ (Qt)
QLayoutItem * QLayout::takeAt ( int index ) [pure virtual]
Must be implemented in subclasses to remove the layout item at index from the layout, and return the item. If there is no such item, the function must do nothing and return 0. Items are numbered consecutively from 0. If an item is removed, other items will be renumbered.

Код
C++ (Qt)
while(layout->count())
{
 QLayoutItem * item = layout->itemAt(0);
...
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Декабрь 19, 2011, 02:28 »

Удаляет только четные виджеты ?
потому что после удаления надо ещё --i делать
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Exproment
Гость
« Ответ #3 : Декабрь 19, 2011, 03:23 »

спасибо.. не подумал что он после удаления перестраивает LayoutItem. )

Решено.
« Последнее редактирование: Декабрь 19, 2011, 03:25 от Exproment » Записан
Exproment
Гость
« Ответ #4 : Декабрь 19, 2011, 03:45 »

хммм.. возникла новая проблемка.. как вынуть виджет не удаляя его ? т.е. код:
Код
C++ (Qt)
while( (item = layout->itemAt(0)) )
{
layout->removeItem( item );
layout->removeWidget(item->widget());
delete item;
}
 
так же отображает виджеты и новый при добавлении рисуется поверх него.. 0_о
а код:
Код
C++ (Qt)
while( (item = layout->itemAt(0)) )
{
layout->removeItem( item );
layout->removeWidget(item->widget());
delete item->widget();
                       delete item;
layout->update();
}
работает правильно..но удаляет виджет.. который нужно сохранить(он должен продолжать работу даже если скрыт) - как вариант можно старый виджет сделать невизибл... но хотелось бы знать на будущее как правильнее... ) буду признателен...
Записан
andrew.k
Гость
« Ответ #5 : Декабрь 19, 2011, 06:59 »

Ну так не удаляй виджет!
Код
C++ (Qt)
while( (item = layout->itemAt(0)) )
{
layout->removeItem( item );
layout->removeWidget(item->widget());
//delete item->widget();
                       delete item;
layout->update();
}
Записан
Morgoth
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #6 : Сентябрь 01, 2012, 22:21 »

оживлю немного темку про QLayout...

если я удаляю добавленый на layout виджет, обязательно ли убирать его из layout?
вроде он и без этого прекрасно существует, он что сам несуществующие объекты удаляет?
Записан
andrew.k
Гость
« Ответ #7 : Сентябрь 01, 2012, 23:12 »

оживлю немного темку про QLayout...

если я удаляю добавленый на layout виджет, обязательно ли убирать его из layout?
вроде он и без этого прекрасно существует, он что сам несуществующие объекты удаляет?
при удалении виджета, он удаляется из лейаута.
Записан
Morgoth
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #8 : Сентябрь 02, 2012, 06:56 »

оживлю немного темку про QLayout...

если я удаляю добавленый на layout виджет, обязательно ли убирать его из layout?
вроде он и без этого прекрасно существует, он что сам несуществующие объекты удаляет?
при удалении виджета, он удаляется из лейаута.
ок, спасибо
Записан
PavelVX
Гость
« Ответ #9 : Сентябрь 18, 2012, 08:12 »

Теперь и я вмешаюсь в темку Улыбающийся Есть виджет с такой компановкой:
Код:
//btnVBoxLayout - глобальная переменная, тип QVBoxLayout
    QVBoxLayout * mainVBoxLayout = new QVBoxLayout();
    QLabel * tstLabel = new QLabel("Тут могла быть ваша реклама :)", this);
    mainVBoxLayout->addWidget(tstLabel);
    mainVBoxLayout->addLayout(btnVBoxLayout);
    QHBoxLayout * bottomHBoxLayout = new QHBoxLayout();
    bottomHBoxLayout->addWidget(btnBack);
    bottomHBoxLayout->addWidget(btnRefresh);
    mainVBoxLayout->addLayout(bottomHBoxLayout);
    setLayout(mainVBoxLayout);
В btnVBoxLayout динамически добавляю/удаляю кнопки. При добавлении кнопок, виджет растет в высоту, как и надо. Но при удалении не стягивается. Уже крутил, вертел, не хочет уменьшаться. Подскажите, как его уменьшать-то?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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