Fix crash in dtor of QGVPage

This commit is contained in:
WandererFan 2016-07-05 15:01:54 -04:00 committed by wmayer
parent 19ff06c9cd
commit dd5b461e35
4 changed files with 15 additions and 14 deletions

View File

@ -90,10 +90,12 @@ using namespace TechDrawGui;
MDIViewPage::MDIViewPage(ViewProviderPage *pageVp, Gui::Document* doc, QWidget* parent)
: Gui::MDIView(doc, parent),
m_view(new QGVPage(pageVp)),
//m_view(new QGVPage(pageVp)),
pageGui(pageVp),
m_frameState(true)
{
m_view = new QGVPage(pageVp,m_scene);
m_backgroundAction = new QAction(tr("&Background"), this);
m_backgroundAction->setEnabled(false);
m_backgroundAction->setCheckable(true);
@ -141,7 +143,7 @@ MDIViewPage::MDIViewPage(ViewProviderPage *pageVp, Gui::Document* doc, QWidget*
this, SLOT(setRenderer(QAction *)));
setWindowTitle(tr("dummy[*]")); //Yuck. prevents "QWidget::setWindowModified: The window title does not contain a '[*]' placeholder"
setCentralWidget(m_view);
setCentralWidget(m_view); //this makes m_view a Qt child of MDIViewPage
m_orientation = QPrinter::Landscape;
m_pageSize = QPrinter::A4;
@ -194,7 +196,8 @@ MDIViewPage::~MDIViewPage()
}
deleteItems.clear();
delete m_view;
//m_view will be deleted by MDIViewPage as a Qt child
//delete m_view;
}

View File

@ -28,6 +28,7 @@
#include "Gui/Selection.h"
#include <QPrinter>
#include <QGraphicsScene>
QT_BEGIN_NAMESPACE
class QAction;
@ -79,6 +80,8 @@ public:
QGVPage* getQGVPage(void) {return m_view;};
QGraphicsScene m_scene;
public Q_SLOTS:
void setRenderer(QAction *action);
void viewAll();

View File

@ -28,7 +28,7 @@
# include <QFileInfo>
# include <QFileDialog>
# include <QGLWidget>
# include <QGraphicsScene>
//# include <QGraphicsScene>
# include <QGraphicsEffect>
# include <QMouseEvent>
# include <QPainter>
@ -77,7 +77,7 @@
using namespace TechDrawGui;
QGVPage::QGVPage(ViewProviderPage *vp, QWidget *parent)
QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene& s, QWidget *parent)
: QGraphicsView(parent)
, pageTemplate(0)
, m_renderer(Native)
@ -91,7 +91,7 @@ QGVPage::QGVPage(ViewProviderPage *vp, QWidget *parent)
const char* name = vp->getPageObject()->getNameInDocument();
setObjectName(QString::fromLocal8Bit(name));
setScene(new QGraphicsScene(this));
setScene(&s);
//setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
setCacheMode(QGraphicsView::CacheBackground);
setTransformationAnchor(AnchorUnderMouse);
@ -105,12 +105,6 @@ QGVPage::QGVPage(ViewProviderPage *vp, QWidget *parent)
m_backgroundItem->setZValue(ZVALUE::BACKGROUND);
// scene()->addItem(m_backgroundItem); // TODO IF SEGFAULTS WITH DRAW ENABLE THIS (REDRAWS ARE SLOWER :s)
// Prepare background check-board pattern
QLinearGradient gradient;
gradient.setStart(0, 0);
gradient.setFinalStop(0, height());
gradient.setColorAt(0., QColor(72, 72, 72));
gradient.setColorAt(1., QColor(150, 150, 150));
bkgBrush = new QBrush(QColor::fromRgb(70,70,70));
resetCachedContent();

View File

@ -24,6 +24,7 @@
#define DRAWINGGUI_CANVASVIEW_H
#include <QGraphicsView>
#include <QGraphicsScene>
#include "ViewProviderPage.h"
@ -54,7 +55,7 @@ class TechDrawGuiExport QGVPage : public QGraphicsView
public:
enum RendererType { Native, OpenGL, Image };
QGVPage(ViewProviderPage *vp, QWidget *parent = 0);
QGVPage(ViewProviderPage *vp, QGraphicsScene& s, QWidget *parent = 0);
~QGVPage();
void setRenderer(RendererType type = Native);
@ -116,7 +117,7 @@ private:
bool drawBkg;
QGraphicsRectItem *m_backgroundItem;
QGraphicsRectItem *m_outlineItem;
QBrush *bkgBrush;
QBrush* bkgBrush;
QImage m_image;
ViewProviderPage *pageGui;
};