Добрый день.
Хочу добиться эффекта, что бы при открытии QTreeWidgetItem ( пункт меню будем считать ) появлялся некий виджит с достаточно большим к-ом данных, и соотв. при закрытии он исчезал. На данный момент делают след. образом и не могу понять почему оно падает, когда я открыл, потом закрыл, а потом пробую опять открыть оно падает:
#ifndef GRAPHICWIDGET_H
#define GRAPHICWIDGET_H
#include <QWidget>
class QTreeWidgetItem;
class QTreeWidget;
class QComboBox;
class GraphicWidget : public QWidget
{
    Q_OBJECT
public:
    explicit GraphicWidget(QWidget *parent = 0);
    
private:
    QTreeWidget     *tree;
    QTreeWidgetItem *childNew;
    QComboBox       *box;
signals:
    
public slots:
    void itemCollapsed(QTreeWidgetItem *item);
    void itemExpanded(QTreeWidgetItem *item);
};
#endif // GRAPHICWIDGET_H
#include "graphicwidget.h"
#include <QVBoxLayout>
#include <QTreeWidget>
#include <QHeaderView>
#include <QComboBox>
#include "graphicplot.h"
GraphicWidget::GraphicWidget(QWidget *parent) : QWidget(parent) {
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    tree = new QTreeWidget(this);
    QList<QTreeWidgetItem *> items;
    tree->header()->hide();
    tree->setColumnCount(2);
    QTreeWidgetItem *top = new QTreeWidgetItem();
    top->setText(0, "TOP");
    childNew = new QTreeWidgetItem();
    childNew->setText(0, "");
    childNew->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
    top->addChild(childNew);
    items.push_back(top);
    tree->setHeaderLabel("GUI");
    tree->addTopLevelItems(items);
    tree->setItemWidget(childNew, 1, 0);
    mainLayout->addWidget(tree);
    setLayout(mainLayout);
    box = new QComboBox();
    connect(tree, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(itemCollapsed(QTreeWidgetItem*)));
    connect(tree, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(itemExpanded(QTreeWidgetItem*)));
}
void GraphicWidget::itemCollapsed(QTreeWidgetItem *item)
{
    if (item == childNew) {
        qDebug() << "GraphicWidget::itemCollapsed";
        tree->setItemWidget(childNew, 1, 0);
    }
}
void GraphicWidget::itemExpanded(QTreeWidgetItem *item)
{
    if (item == childNew) {
        qDebug() << "GraphicWidget::itemExpanded";
        tree->setItemWidget(childNew, 1, box);
    }
}
И теперь ряд вопросов:
1. почему оно падает? Если каждый раз делать new QComboBox заместь того, что бы пихать где-то там созданный box, то все ок. Но просто в моем случаи этот QComboBox будет хранить большой к-во данных и каждый раз перед  tree->setItemWidget(...); создавать новый QComboBox и копировать туда данные для отображения будет долго...
Если так вообще делать не хорошо, то заодно если не тяжело поясните как делать хорошо?
2. У меня данный GraphicWidget планируется, что будет досаточно большой, я иммею ввиду будет много QTreeWidgetitem'ов и в связи с этим вопрос как с этим бороться, что бы не делать много подобного кода вида:
    QTreeWidgetItem *top = new QTreeWidgetItem();
    top->setText(0, "TOP");
    childNew = new QTreeWidgetItem();
    childNew->setText(0, "");
    childNew->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
    top->addChild(childNew);
Вроде как все.
Спасибо за внимание!
P.S.:  Вопрос не по теме.. Подскажите, а как ставить для темы статус - РЕШЕНО? или это только могут модераторы делать?
 
					1. очевидно что объект удаляется.
что бы заново не записывать данные используй setModel()
2.писать структурированный код с процедурами и функциями.