Bug fix: qet crash when close a diagram with a cross ref item.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3015 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2014-04-20 23:37:03 +00:00
parent 38f1d820b1
commit eee2a9181e
3 changed files with 26 additions and 10 deletions

View File

@@ -0,0 +1,12 @@
Type = UserType + ???
Element + 1000
Conductor + 1001
Terminal + 1002
ElementTextItem + 1003
DiagramTextItem + 1004
IndependentTextItem + 1005
ConductorTextItem + 1006
DiagramImageItem + 1007
QetShapItem + 1008
crossRefItem + 1009
ElementPrimitiveDecorator + 2200

View File

@@ -33,6 +33,7 @@
#include "qetapp.h" #include "qetapp.h"
#include "qetgraphicsitem/diagramimageitem.h" #include "qetgraphicsitem/diagramimageitem.h"
#include "qetgraphicsitem/qetshapeitem.h" #include "qetgraphicsitem/qetshapeitem.h"
#include "qetgraphicsitem/crossrefitem.h"
const int Diagram::xGrid = 10; const int Diagram::xGrid = 10;
const int Diagram::yGrid = 10; const int Diagram::yGrid = 10;
@@ -80,32 +81,32 @@ Diagram::Diagram(QObject *parent) :
} }
/** /**
Destructeur * @brief Diagram::~Diagram
* Destructor
*/ */
Diagram::~Diagram() { Diagram::~Diagram() {
// clear undo stack to prevent errors, because contains pointers to this diagram and is elements. // clear undo stack to prevent errors, because contains pointers to this diagram and is elements.
undoStack().clear(); undoStack().clear();
// suppression du QGIManager - tous les elements qu'il connait sont supprimes //delete of QGIManager, every elements he knows are removed
delete qgi_manager_; delete qgi_manager_;
// remove of conductor setter // remove of conductor setter
delete conductor_setter_; delete conductor_setter_;
// suppression des objets gerant les deplacements // delete of object for manage movement
delete elements_mover_; delete elements_mover_;
delete element_texts_mover_; delete element_texts_mover_;
// recense les items supprimables // list removable items
QList<QGraphicsItem *> deletable_items; QList<QGraphicsItem *> deletable_items;
foreach(QGraphicsItem *qgi, items()) { foreach(QGraphicsItem *qgi, items()) {
if (qgi -> parentItem()) continue; if (qgi -> parentItem()) continue;
if (qgraphicsitem_cast<Conductor *>(qgi)) continue; if (qgraphicsitem_cast<Conductor *>(qgi)) continue;
else if (qgraphicsitem_cast<CrossRefItem *>(qgi)) continue;
deletable_items << qgi; deletable_items << qgi;
} }
// suppression des items supprimables qDeleteAll (deletable_items);
foreach(QGraphicsItem *qgi_d, deletable_items) {
delete qgi_d;
}
} }
/** /**

View File

@@ -39,6 +39,9 @@ class CrossRefItem : public QGraphicsObject
explicit CrossRefItem(Element *elmt, QGraphicsItem *parent = 0); explicit CrossRefItem(Element *elmt, QGraphicsItem *parent = 0);
~CrossRefItem(); ~CrossRefItem();
enum { Type = UserType + 1009 };
virtual int type() const { return Type; }
QRectF boundingRect() const; QRectF boundingRect() const;
virtual QPainterPath shape() const; virtual QPainterPath shape() const;