Correction d'une segfault survenant avec Qt 4.4

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@349 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2008-07-17 22:57:50 +00:00
parent 429d7e55a2
commit 158cf97bb3
3 changed files with 27 additions and 12 deletions

View File

@@ -37,9 +37,10 @@ Diagram::Diagram(QObject *parent) :
draw_grid(true),
use_border(true),
moved_elements_fetched(false),
qgi_manager(this),
draw_terminals(true)
{
undo_stack = new QUndoStack();
qgi_manager = new QGIManager(this);
setBackgroundBrush(Qt::white);
conductor_setter = new QGraphicsLineItem(0, 0);
conductor_setter -> setZValue(1000000);
@@ -59,8 +60,23 @@ Diagram::Diagram(QObject *parent) :
Destructeur
*/
Diagram::~Diagram() {
if (conductor_setter -> scene()) removeItem(conductor_setter);
delete conductor_setter;
// suppression de la liste des annulations - l'undo stack fait appel au qgimanager pour supprimer certains elements
delete undo_stack;
// suppression du QGIManager - tous les elements qu'il connait sont supprimes
delete qgi_manager;
// recense les items supprimables
QList<QGraphicsItem *> deletable_items;
foreach(QGraphicsItem *qgi, items()) {
if (qgi -> parentItem()) continue;
if (qgraphicsitem_cast<Conductor *>(qgi)) continue;
deletable_items << qgi;
}
// suppression des items supprimables
foreach(QGraphicsItem *qgi_d, deletable_items) {
delete qgi_d;
}
}
/**
@@ -469,7 +485,7 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in
*/
void Diagram::diagramTextChanged(DiagramTextItem *text_item, const QString &old_text, const QString &new_text) {
if (!text_item) return;
undo_stack.push(new ChangeDiagramTextCommand(text_item, old_text, new_text));
undo_stack -> push(new ChangeDiagramTextCommand(text_item, old_text, new_text));
}
/**

View File

@@ -75,8 +75,8 @@ class Diagram : public QGraphicsScene {
QSet<Conductor *> conductors_to_move;
QHash<Conductor *, Terminal *> conductors_to_update;
QSet<DiagramTextItem *> texts_to_move;
QGIManager qgi_manager;
QUndoStack undo_stack;
QGIManager *qgi_manager;
QUndoStack *undo_stack;
bool draw_terminals;
// methodes
@@ -253,12 +253,12 @@ inline const QSet<DiagramTextItem *> &Diagram::textsToMove() {
/// @return la pile d'annulations de ce schema
inline QUndoStack &Diagram::undoStack() {
return(undo_stack);
return(*undo_stack);
}
/// @return le egstionnaire de QGraphicsItem de ce schema
inline QGIManager &Diagram::qgiManager() {
return(qgi_manager);
return(*qgi_manager);
}
/// @return true si les bornes sont affichees, false sinon

View File

@@ -30,6 +30,7 @@
@param parent Le QWidegt parent de cette vue de schema
*/
DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
setAttribute(Qt::WA_DeleteOnClose, true);
setInteractive(true);
setCacheMode(QGraphicsView::CacheBackground);
setOptimizationFlags(QGraphicsView::DontSavePainterState|QGraphicsView::DontAdjustForAntialiasing);
@@ -422,10 +423,8 @@ void DiagramView::closeEvent(QCloseEvent *event) {
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
}
}
if (retour) {
event -> accept();
delete this;
} else event -> ignore();
if (retour) event -> accept();
else event -> ignore();
}