Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kuzulis от Июль 22, 2009, 07:40



Название: Удаление динамических виджетов [РЕШЕНО]
Отправлено: kuzulis от Июль 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 ?
 


Название: Re: Удаление динамических виджетов
Отправлено: Alex Custov от Июль 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.


Название: Re: Удаление динамических виджетов
Отправлено: kuzulis от Июль 22, 2009, 08:29
Ага, т.е получается, что программисту не нужно заботится об удалении виджетов, добавленных с помощью ф-ций addWidget или addLayout ?


Название: Re: Удаление динамических виджетов
Отправлено: Авварон от Июль 22, 2009, 08:43
если у QObject'а есть parent, то этот объект удаляется предком автоматически


Название: Re: Удаление динамических виджетов
Отправлено: Alex Custov от Июль 22, 2009, 13:12
Ага, т.е получается, что программисту не нужно заботится об удалении виджетов, добавленных с помощью ф-ций addWidget или addLayout ?

нет, не нужно. В доке же всё написано :)


Название: Re: Удаление динамических виджетов
Отправлено: kuzulis от Июль 22, 2009, 14:31
Спасибо! :)

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