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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление динамических виджетов [РЕШЕНО]  (Прочитано 4719 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Июль 22, 2009, 07:40 »

Доброго времени суток!

Имею к примеру приложение, в котором при каких-то условиях создается или удаляется объект класса QWidget.
Этот объект в себе содержит Layout + несколько мелких виджетов...
Мелкие виджеты (кнопочки, лабели и т.п.) создаются без параметра parent.

Нужно ли при удалении виджета QWidget удалять и эти мелкие виджеты? или они сами удалятся автоматом?

пример:
Код:
...
QWidget *widget; //динамический виджет
QLabel *label;//
QVBoxLayout *centralLayout;
...


MyCentralWidget::MyCentralWidget()
{
    centralLayout = new QVBoxLayout;
    setLayout(centralLayout )
}

MyCentralWidget::createWidget() //создаем объект типа QWidget
{
    widget = new QWidget;
    label = new QLabel(tr("i label");
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label);
    widget ->setLayout(layout);
    centralLayout ->addWidget(widget);
}

MyCentralWidget::removeWidget() //удаляем объект типа QWidget
{
    if (widget) {
        centralLayout ->remoteWidget(widget);
        delete widget; // <=== удалится ли при этом QLabel?
        widget=0;
    }
}


собственно вопрос... QLabel нужно создавать с параметром parent ? И если ДА, то парентом должен быть widget или layout ?
 
« Последнее редактирование: Июль 22, 2009, 14:33 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Июль 22, 2009, 08:04 »

Цитировать
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.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июль 22, 2009, 08:29 »

Ага, т.е получается, что программисту не нужно заботится об удалении виджетов, добавленных с помощью ф-ций addWidget или addLayout ?
Записан

ArchLinux x86_64 / Win10 64 bit
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июль 22, 2009, 08:43 »

если у QObject'а есть parent, то этот объект удаляется предком автоматически
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Июль 22, 2009, 13:12 »

Ага, т.е получается, что программисту не нужно заботится об удалении виджетов, добавленных с помощью ф-ций addWidget или addLayout ?

нет, не нужно. В доке же всё написано Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Июль 22, 2009, 14:31 »

Спасибо! Улыбающийся

ЗЫ: мы доку не читаем!
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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