[TD]fix crash on Dim delete

- adjust index/cache options to avoid "dirty" screen
  region errors.
- may be masking missing "prepareGeometryChange"
This commit is contained in:
wandererfan
2020-03-05 16:43:54 -05:00
committed by WandererFan
parent b8da1e3bea
commit b5ea5ed31e
5 changed files with 34 additions and 13 deletions

View File

@@ -137,7 +137,11 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene* s, QWidget *parent)
setMouseTracking(true);
viewport()->setMouseTracking(true);
setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
// setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate); //this prevents crash when deleting dims.
//scene(view?) indices of dirty regions gets
//out of sync. missing prepareGeometryChange
//somewhere???? QTBUG-18021????
setCacheMode(QGraphicsView::CacheBackground);
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
@@ -306,7 +310,8 @@ int QGVPage::removeQViewByName(const char* name)
balloon->disconnect();
}
removeQViewFromScene(ourItem);
delete ourItem;
delete ourItem; //commenting this prevents crash but means a small memory waste.
//alternate fix(?) is to change indexing/caching option in scene/view
}
return 0;
@@ -314,17 +319,13 @@ int QGVPage::removeQViewByName(const char* name)
void QGVPage::removeQViewFromScene(QGIView *view)
{
QGraphicsItemGroup* grp = view->group();
if (grp) {
grp->removeFromGroup(view);
}
if (view->parentItem()) { //not top level
view->setParentItem(0);
}
if (view->scene()) {
view->scene()->removeItem(view);
if (view->scene() != nullptr) {
QGIView* qgParent = dynamic_cast<QGIView*>(view->parentItem());
if (qgParent != nullptr) {
qgParent->removeChild(view);
} else {
view->scene()->removeItem(view);
}
}
}