【QT】析构函数执行引发异常
在析构函数执行完成后引发异常,程序崩溃
造成异常的原因
在布局添加QSpacerItem引起的异常,使用try…catch无法捕获
QSpacerItem *spacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);QHBoxLayout *hLayout2 = new QHBoxLayout;hLayout2->addWidget(typeLabel);hLayout2->addWidget(targetTypeBox);hLayout2->addSpacerItem(spacer);hLayout2->addWidget(nameLabel);hLayout2->addWidget(boomNameBox);hLayout2->addSpacerItem(spacer);hLayout2->addWidget(degreeLabel);hLayout2->addWidget(degreeBox);hLayout2->addSpacerItem(spacer);hLayout2->addWidget(editMenuBtn[5]);hLayout2->addWidget(editMenuBtn[6]);
Tips
还未能搞清楚为啥添加弹簧后会出现这个异常,暂时只能在布局删掉QSpacerItem
原因是spacer多次析构,spacer多次添加在布局中,布局删除时会多次释放spacer指针。还是不能偷懒啊
QSpacerItem *spacer1 = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);QSpacerItem *spacer2 = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);QSpacerItem *spacer3 = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);QHBoxLayout *hLayout2 = new QHBoxLayout;hLayout2->addWidget(typeLabel);hLayout2->addWidget(targetTypeBox);hLayout2->addSpacerItem(spacer1);hLayout2->addWidget(nameLabel);hLayout2->addWidget(boomNameBox);hLayout2->addSpacerItem(spacer2);hLayout2->addWidget(degreeLabel);hLayout2->addWidget(degreeBox);hLayout2->addSpacerItem(spacer3);hLayout2->addWidget(editMenuBtn[5]);hLayout2->addWidget(editMenuBtn[6]);