#pragma once
#include <QWidget>
class CWin : public QWidget
{
Q_OBJECT
public:
explicit CWin(QWidget *parent=0);
public slots:
void preventChildrenKilling();
void preventChildrenKilling(QObject *);
};
#include "CWin.h"
CWin::CWin(QWidget *parent) :QWidget(parent)
{
connect(this,SIGNAL(destroyed()),this,SLOT(preventChildrenKilling()));
connect(this,SIGNAL(destroyed(QObject*)),this,SLOT(preventChildrenKilling(QObject*)));
}
void CWin::preventChildrenKilling()
{
destroy(true,false);
}
void CWin::preventChildrenKilling(QObject*)
{
destroy(true,false);
}
CWin* w=new CWin;
std::vector<QWidget*> list;
list.push_back(new QWidget(w));
list.push_back(new QWidget(w));
list.push_back(new QWidget(w));
delete w;
list[0]->show(); //тут нарушение сегментации (дитё уже убито)
list[1]->show();
list[2]->show();
int main(int a, char** B)
{
QApplication app(a,B);
CWin* w = new CWin;
QWidget* wgt = new QWidget(w);
foreach(QObject* obj, w->children()) {
if(obj->isWidgetType()) {
std::cout << __func__ << '\n';
qobject_cast<QWidget*>(obj)->setParent(NULL);
}
}
delete w;
wgt->show();
return app.exec();
}
CWin* w=new CWin;
list.push_back(new QWidget(w));
list.push_back(new QWidget(w));
list.push_back(new QWidget(w));
list[0]->setParent(0);
list[1]->setParent(0);
list[2]->setParent(0);
delete w;
w=0;
list[0]->show();
list[1]->show();
list[2]->show();