[TD]fix segfault on repeated open/close

[TD]fix memory leak in ViewProviderPage

[TD]fix QGView redraws at idle
This commit is contained in:
Wanderer Fan
2022-07-24 14:16:40 -04:00
committed by WandererFan
parent 80d5e9a0b8
commit 2c047e361d
5 changed files with 22 additions and 28 deletions

View File

@@ -251,11 +251,10 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGSPage* s, QWidget *parent)
m_parentMDI = static_cast<MDIViewPage*>(parent);
m_saveContextEvent = nullptr;
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);
setRenderer(Native);
// setRenderer(OpenGL); //gives rotten quality, don't use this
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
d->init();
if (m_atCursor) {
@@ -270,8 +269,6 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGSPage* s, QWidget *parent)
// setDragMode(ScrollHandDrag);
setDragMode(QGraphicsView::NoDrag);
resetCursor();
setRenderer(Native);
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
bkgBrush = new QBrush(getBackgroundColor());
@@ -279,8 +276,6 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGSPage* s, QWidget *parent)
balloonCursor->setPixmap(prepareCursorPixmap("TechDraw_Balloon.svg", balloonHotspot = QPoint(8, 59)));
balloonCursor->hide();
resetCachedContent();
initNavigationStyle();
createStandardCursors(devicePixelRatio());
@@ -294,8 +289,7 @@ QGVPage::~QGVPage()
void QGVPage::centerOnPage(void)
{
// Base::Console().Message("QGVP::centerOnPage()\n");
centerOn(m_scene->getTemplateCenter());
centerOn(m_vpPage->getGraphicsScene()->getTemplateCenter());
}
void QGVPage::initNavigationStyle()
@@ -382,8 +376,6 @@ void QGVPage::drawBackground(QPainter *p, const QRectF &)
p->save();
p->resetTransform();
resetCachedContent();
p->setBrush(*bkgBrush);
p->drawRect(viewport()->rect().adjusted(-2,-2,2,2)); //just bigger than viewport to prevent artifacts
@@ -405,7 +397,6 @@ void QGVPage::drawBackground(QPainter *p, const QRectF &)
p->setBrush(pageBrush);
p->drawRect(poly.boundingRect());
resetCachedContent();
p->restore();
}
@@ -416,10 +407,13 @@ void QGVPage::setRenderer(RendererType type)
if (m_renderer == OpenGL) {
#ifndef QT_NO_OPENGL
setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
// setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); //QGLWidget is obsolete
setViewport(new QOpenGLWidget);
setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
#endif
} else {
setViewport(new QWidget);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
}
}