Название: Где удаляются данные из сгенерированых ui?
Отправлено: 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. А так, непонятно как будет удаляться. Спасибо)
Название: Re: Где удаляются данные из сгенерированых ui?
Отправлено: BRE от Апрель 28, 2010, 12:39
Эти виджеты добавляются в layout'ы и в этот момент им назначается parent.
Название: Re: Где удаляются данные из сгенерированых ui?
Отправлено: alexman от Апрель 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); ... }
Название: Re: Где удаляются данные из сгенерированых ui?
Отправлено: Alex Custov от Апрель 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.
|