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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Где удаляются данные из сгенерированых ui?  (Прочитано 2642 раз)
dr_Begemot
Гость
« : Апрель 28, 2010, 12:35 »

Уважаемые, возник такой вопрос...
Есть вот такой сгенерированный UI файл:
Код:
/********************************************************************************
** Form generated from reading UI file 'AxisPropertyDlg.ui'
**
** Created: Wed 7. Apr 14:46:10 2010
**      by: Qt User Interface Compiler version 4.6.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_AXISPROPERTYDLG_H
#define UI_AXISPROPERTYDLG_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QGridLayout>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QSpacerItem>
#include <QtGui/QStackedWidget>
#include <QtGui/QToolButton>
#include <QtGui/QTreeView>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_AxisPropertyDlg
{
public:
    QGridLayout *gridLayout;
    QTreeView *treeView;
    QStackedWidget *stackedWidget;
    QWidget *[b]page[/b];
    QWidget *[b]page_2[/b];
    QHBoxLayout *[b]horizontalLayout[/b];
    QToolButton *btnAxisAdd;
    QSpacerItem *[b]horizontalSpacer[/b];
    QToolButton *btnAxisDependAdd;
    QSpacerItem *[b]horizontalSpacer_2[/b];
    QToolButton *btnAxisRemove;

    void setupUi(QDialog *AxisPropertyDlg)
    {
        if (AxisPropertyDlg->objectName().isEmpty())
            AxisPropertyDlg->setObjectName(QString::fromUtf8("AxisPropertyDlg"));
        AxisPropertyDlg->resize(692, 546);
        AxisPropertyDlg->setMinimumSize(QSize(660, 546));
        gridLayout = new QGridLayout(AxisPropertyDlg);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        treeView = new QTreeView(AxisPropertyDlg);
        treeView->setObjectName(QString::fromUtf8("treeView"));

        gridLayout->addWidget(treeView, 0, 0, 1, 1);

        stackedWidget = new QStackedWidget(AxisPropertyDlg);
        stackedWidget->setObjectName(QString::fromUtf8("stackedWidget"));
        stackedWidget->setMinimumSize(QSize(438, 493));
        [b]page = new QWidget();[/b]
        page->setObjectName(QString::fromUtf8("page"));
        stackedWidget->addWidget(page);
        [b]page_2 = new QWidget();[/b]
        page_2->setObjectName(QString::fromUtf8("page_2"));
        stackedWidget->addWidget(page_2);

        gridLayout->addWidget(stackedWidget, 0, 1, 2, 1);

        [b]horizontalLayout = new QHBoxLayout();[/b]
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        btnAxisAdd = new QToolButton(AxisPropertyDlg);
        btnAxisAdd->setObjectName(QString::fromUtf8("btnAxisAdd"));
        QIcon icon;
        icon.addFile(QString::fromUtf8(":/images/operations/add.png"), QSize(), QIcon::Normal, QIcon::Off);
        btnAxisAdd->setIcon(icon);

        horizontalLayout->addWidget(btnAxisAdd);

        [b]horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);[/b]

        horizontalLayout->addItem(horizontalSpacer);

        btnAxisDependAdd = new QToolButton(AxisPropertyDlg);
        btnAxisDependAdd->setObjectName(QString::fromUtf8("btnAxisDependAdd"));
        btnAxisDependAdd->setEnabled(false);

        horizontalLayout->addWidget(btnAxisDependAdd);

        horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        horizontalLayout->addItem(horizontalSpacer_2);

        btnAxisRemove = new QToolButton(AxisPropertyDlg);
        btnAxisRemove->setObjectName(QString::fromUtf8("btnAxisRemove"));
        QIcon icon1;
        icon1.addFile(QString::fromUtf8(":/images/operations/remove.png"), QSize(), QIcon::Normal, QIcon::Off);
        btnAxisRemove->setIcon(icon1);

        horizontalLayout->addWidget(btnAxisRemove);


        gridLayout->addLayout(horizontalLayout, 1, 0, 1, 1);

        QWidget::setTabOrder(treeView, btnAxisAdd);
        QWidget::setTabOrder(btnAxisAdd, btnAxisDependAdd);
        QWidget::setTabOrder(btnAxisDependAdd, btnAxisRemove);

        retranslateUi(AxisPropertyDlg);

        QMetaObject::connectSlotsByName(AxisPropertyDlg);
    } // setupUi

    void retranslateUi(QDialog *AxisPropertyDlg)
    {
        AxisPropertyDlg->setWindowTitle(QApplication::translate("AxisPropertyDlg", "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265 \321\201\320\262\320\276\320\271\321\201\321\202\320\262: \320\236\321\201\320\270", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
        btnAxisAdd->setToolTip(QApplication::translate("AxisPropertyDlg", "\320\224\320\276\320\261\320\260\320\262\320\270\321\202\321\214 \320\276\321\201\321\214", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_TOOLTIP
        btnAxisAdd->setText(QApplication::translate("AxisPropertyDlg", "...", 0, QApplication::UnicodeUTF8));
        btnAxisDependAdd->setText(QApplication::translate("AxisPropertyDlg", "\320\224\320\276\320\261\320\260\320\262\320\270\321\202\321\214\320\267\320\260\320\262\320\270\321\201\320\270\320\274\321\203\321\216 \320\276\321\201\321\214", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
        btnAxisRemove->setToolTip(QApplication::translate("AxisPropertyDlg", "\320\243\320\264\320\260\320\273\320\270\321\202\321\214 \320\276\321\201\321\214", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_TOOLTIP
        btnAxisRemove->setText(QApplication::translate("AxisPropertyDlg", "...", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class AxisPropertyDlg: public Ui_AxisPropertyDlg {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_AXISPROPERTYDLG_H

Обратите внимание, на выделенное жирным шрифтом!
Например page = new QWidget();, память выделяется, однако указатель на родителя не передается. Вопрос: Когда будет удален page?
Если бы было сгенерировано page = new QWidget(AxisPropertyDlg); - другое дело! При вызове деструктора у AxisPropertyDlg вызывался бы деструктор page. А так, непонятно как будет удаляться.

Спасибо)
Записан
BRE
Гость
« Ответ #1 : Апрель 28, 2010, 12:39 »

Эти виджеты добавляются в layout'ы и в этот момент им назначается parent.
Записан
alexman
Гость
« Ответ #2 : Апрель 28, 2010, 15:33 »

В int QStackedWidget::addWidget ( QWidget * widget ) вызывается функция
Код:
void QLayout::addChildWidget(QWidget *w)
{
    QWidget *mw = parentWidget();
    QWidget *pw = w->parentWidget();
    ...
    if (!pw && mw)
        w->setParent(mw);
    ...
}
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Апрель 28, 2010, 17:33 »

Цитировать
int QStackedWidget::addWidget ( QWidget * widget )
Appends the given widget to the QStackedWidget and returns the index position. Ownership of widget is passed on to the QStackedWidget.

If the QStackedWidget is empty before this function is called, widget becomes the current widget.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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