mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-20 16:20:52 +01:00
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:
24
diagram.cpp
24
diagram.cpp
@@ -37,9 +37,10 @@ Diagram::Diagram(QObject *parent) :
|
|||||||
draw_grid(true),
|
draw_grid(true),
|
||||||
use_border(true),
|
use_border(true),
|
||||||
moved_elements_fetched(false),
|
moved_elements_fetched(false),
|
||||||
qgi_manager(this),
|
|
||||||
draw_terminals(true)
|
draw_terminals(true)
|
||||||
{
|
{
|
||||||
|
undo_stack = new QUndoStack();
|
||||||
|
qgi_manager = new QGIManager(this);
|
||||||
setBackgroundBrush(Qt::white);
|
setBackgroundBrush(Qt::white);
|
||||||
conductor_setter = new QGraphicsLineItem(0, 0);
|
conductor_setter = new QGraphicsLineItem(0, 0);
|
||||||
conductor_setter -> setZValue(1000000);
|
conductor_setter -> setZValue(1000000);
|
||||||
@@ -59,8 +60,23 @@ Diagram::Diagram(QObject *parent) :
|
|||||||
Destructeur
|
Destructeur
|
||||||
*/
|
*/
|
||||||
Diagram::~Diagram() {
|
Diagram::~Diagram() {
|
||||||
if (conductor_setter -> scene()) removeItem(conductor_setter);
|
// suppression de la liste des annulations - l'undo stack fait appel au qgimanager pour supprimer certains elements
|
||||||
delete conductor_setter;
|
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) {
|
void Diagram::diagramTextChanged(DiagramTextItem *text_item, const QString &old_text, const QString &new_text) {
|
||||||
if (!text_item) return;
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ class Diagram : public QGraphicsScene {
|
|||||||
QSet<Conductor *> conductors_to_move;
|
QSet<Conductor *> conductors_to_move;
|
||||||
QHash<Conductor *, Terminal *> conductors_to_update;
|
QHash<Conductor *, Terminal *> conductors_to_update;
|
||||||
QSet<DiagramTextItem *> texts_to_move;
|
QSet<DiagramTextItem *> texts_to_move;
|
||||||
QGIManager qgi_manager;
|
QGIManager *qgi_manager;
|
||||||
QUndoStack undo_stack;
|
QUndoStack *undo_stack;
|
||||||
bool draw_terminals;
|
bool draw_terminals;
|
||||||
|
|
||||||
// methodes
|
// methodes
|
||||||
@@ -253,12 +253,12 @@ inline const QSet<DiagramTextItem *> &Diagram::textsToMove() {
|
|||||||
|
|
||||||
/// @return la pile d'annulations de ce schema
|
/// @return la pile d'annulations de ce schema
|
||||||
inline QUndoStack &Diagram::undoStack() {
|
inline QUndoStack &Diagram::undoStack() {
|
||||||
return(undo_stack);
|
return(*undo_stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @return le egstionnaire de QGraphicsItem de ce schema
|
/// @return le egstionnaire de QGraphicsItem de ce schema
|
||||||
inline QGIManager &Diagram::qgiManager() {
|
inline QGIManager &Diagram::qgiManager() {
|
||||||
return(qgi_manager);
|
return(*qgi_manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @return true si les bornes sont affichees, false sinon
|
/// @return true si les bornes sont affichees, false sinon
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
@param parent Le QWidegt parent de cette vue de schema
|
@param parent Le QWidegt parent de cette vue de schema
|
||||||
*/
|
*/
|
||||||
DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
|
DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
setInteractive(true);
|
setInteractive(true);
|
||||||
setCacheMode(QGraphicsView::CacheBackground);
|
setCacheMode(QGraphicsView::CacheBackground);
|
||||||
setOptimizationFlags(QGraphicsView::DontSavePainterState|QGraphicsView::DontAdjustForAntialiasing);
|
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
|
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (retour) {
|
if (retour) event -> accept();
|
||||||
event -> accept();
|
else event -> ignore();
|
||||||
delete this;
|
|
||||||
} else event -> ignore();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user