Kanten und Knoten zu löschen, ohne Fehler
Verfasst: 30. November 2007 14:51
Hallo,
ich möchte Kanten und Knoten hinzufügen und löschen.
Mir ist schon gelungen, Kanten und Knoten hinzuzufügen.
Jetzt versuche ich, Kanten und Knoten zu löschen, aber es klappt nicht.
Ich weiß, dass alle mit dem Knoten verbundene Kanten gelöscht werden sollen, bevor ein Knoten gelöscht wird.
Deshalb lösche ich zuerst alle verbundenen Kanten.
Es klappt, aber wenn ich danach einen Knoten bewege oder einen neuen Knoten einfüge,
bekomme ich einen segmentation fault:
########################################################################################
(gdb) info thread
* 1 Thread 47886270060288 (LWP 30506) 0x00002b8d61c2c7fc in QGraphicsItem::mapToScene () from /usr/lib/libQtGui.so.4
(gdb) backtrace
#0 0x00002b8d61c2c7fc in QGraphicsItem::mapToScene () from /usr/lib/libQtGui.so.4
#1 0x00002b8d61c2c88e in QGraphicsItem::mapFromItem () from /usr/lib/libQtGui.so.4
#2 0x0000000000407dd4 in QGraphicsItem::mapFromItem (this=0x5bcef0, item=0x5bddd0, ax=0, ay=0) at /usr/include/qt4/QtGui/qgraphicsitem.h:301
#3 0x0000000000406b26 in Edge::adjust (this=0x5bcef0) at edge.cpp:53
#4 0x000000000040b9fe in Node::itemChange (this=0x5bdd30, change=QGraphicsItem::ItemPositionChange, value=@0x7fff494cf4c0) at node.cpp:153
#5 0x00002b8d61c30f84 in QGraphicsItem::setPos () from /usr/lib/libQtGui.so.4
#6 0x00002b8d61c3138e in QGraphicsItem::mouseMoveEvent () from /usr/lib/libQtGui.so.4
#7 0x00002b8d61c2cda5 in QGraphicsItem::sceneEvent () from /usr/lib/libQtGui.so.4
#8 0x00002b8d61c3d2fe in QGraphicsScene::itemUpdated () from /usr/lib/libQtGui.so.4
#9 0x00002b8d61c3d922 in QGraphicsScene::clearFocus () from /usr/lib/libQtGui.so.4
#10 0x00002b8d61c428ed in QGraphicsScene::event () from /usr/lib/libQtGui.so.4
#11 0x00002b8d6185fccc in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#12 0x00002b8d61861d7d in QApplication::notify () from /usr/lib/libQtGui.so.4
#13 0x00002b8d61c4f32d in QGraphicsView::mouseMoveEvent () from /usr/lib/libQtGui.so.4
#14 0x00002b8d618a25ef in QWidget::event () from /usr/lib/libQtGui.so.4
#15 0x00002b8d61aefb49 in QFrame::event () from /usr/lib/libQtGui.so.4
#16 0x00002b8d61b5752a in QAbstractScrollArea::viewportEvent () from /usr/lib/libQtGui.so.4
#17 0x00002b8d61c5059e in QGraphicsView::viewportEvent () from /usr/lib/libQtGui.so.4
#18 0x00002b8d61b58858 in QAbstractScrollArea::setViewport () from /usr/lib/libQtGui.so.4
#19 0x00002b8d6185fc83 in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#20 0x00002b8d61862261 in QApplication::notify () from /usr/lib/libQtGui.so.4
#21 0x00002b8d618b30c1 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4
#22 0x00002b8d618b1f90 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4
#23 0x00002b8d618d3dc8 in QX11Info::copyX11Data () from /usr/lib/libQtGui.so.4
#24 0x00002b8d6334bc84 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#25 0x00002b8d6334eacd in g_main_context_check () from /usr/lib/libglib-2.0.so.0
#26 0x00002b8d6334effe in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#27 0x00002b8d62f492c2 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4
#28 0x00002b8d618d3bcf in QX11Info::copyX11Data () from /usr/lib/libQtGui.so.4
#29 0x00002b8d62f28008 in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4
#30 0x00002b8d62f28119 in QEventLoop::exec () from /usr/lib/libQtCore.so.4
#31 0x00002b8d62f2a2e0 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4
#32 0x000000000040b75c in main (argc=1, argv=0x7fff494d0ef8) at main.cpp:12
##########################################################################################
... es scheint, dass es ein Problem in 'mapToScene ()' gibt.
Aber ich verstehe nicht, genau was geschieht.
Wie kann man Kanten und Knoten löschen, ohne Fehler?
ich möchte Kanten und Knoten hinzufügen und löschen.
Mir ist schon gelungen, Kanten und Knoten hinzuzufügen.
Jetzt versuche ich, Kanten und Knoten zu löschen, aber es klappt nicht.
Ich weiß, dass alle mit dem Knoten verbundene Kanten gelöscht werden sollen, bevor ein Knoten gelöscht wird.
Deshalb lösche ich zuerst alle verbundenen Kanten.
Es klappt, aber wenn ich danach einen Knoten bewege oder einen neuen Knoten einfüge,
bekomme ich einen segmentation fault:
########################################################################################
(gdb) info thread
* 1 Thread 47886270060288 (LWP 30506) 0x00002b8d61c2c7fc in QGraphicsItem::mapToScene () from /usr/lib/libQtGui.so.4
(gdb) backtrace
#0 0x00002b8d61c2c7fc in QGraphicsItem::mapToScene () from /usr/lib/libQtGui.so.4
#1 0x00002b8d61c2c88e in QGraphicsItem::mapFromItem () from /usr/lib/libQtGui.so.4
#2 0x0000000000407dd4 in QGraphicsItem::mapFromItem (this=0x5bcef0, item=0x5bddd0, ax=0, ay=0) at /usr/include/qt4/QtGui/qgraphicsitem.h:301
#3 0x0000000000406b26 in Edge::adjust (this=0x5bcef0) at edge.cpp:53
#4 0x000000000040b9fe in Node::itemChange (this=0x5bdd30, change=QGraphicsItem::ItemPositionChange, value=@0x7fff494cf4c0) at node.cpp:153
#5 0x00002b8d61c30f84 in QGraphicsItem::setPos () from /usr/lib/libQtGui.so.4
#6 0x00002b8d61c3138e in QGraphicsItem::mouseMoveEvent () from /usr/lib/libQtGui.so.4
#7 0x00002b8d61c2cda5 in QGraphicsItem::sceneEvent () from /usr/lib/libQtGui.so.4
#8 0x00002b8d61c3d2fe in QGraphicsScene::itemUpdated () from /usr/lib/libQtGui.so.4
#9 0x00002b8d61c3d922 in QGraphicsScene::clearFocus () from /usr/lib/libQtGui.so.4
#10 0x00002b8d61c428ed in QGraphicsScene::event () from /usr/lib/libQtGui.so.4
#11 0x00002b8d6185fccc in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#12 0x00002b8d61861d7d in QApplication::notify () from /usr/lib/libQtGui.so.4
#13 0x00002b8d61c4f32d in QGraphicsView::mouseMoveEvent () from /usr/lib/libQtGui.so.4
#14 0x00002b8d618a25ef in QWidget::event () from /usr/lib/libQtGui.so.4
#15 0x00002b8d61aefb49 in QFrame::event () from /usr/lib/libQtGui.so.4
#16 0x00002b8d61b5752a in QAbstractScrollArea::viewportEvent () from /usr/lib/libQtGui.so.4
#17 0x00002b8d61c5059e in QGraphicsView::viewportEvent () from /usr/lib/libQtGui.so.4
#18 0x00002b8d61b58858 in QAbstractScrollArea::setViewport () from /usr/lib/libQtGui.so.4
#19 0x00002b8d6185fc83 in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#20 0x00002b8d61862261 in QApplication::notify () from /usr/lib/libQtGui.so.4
#21 0x00002b8d618b30c1 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4
#22 0x00002b8d618b1f90 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4
#23 0x00002b8d618d3dc8 in QX11Info::copyX11Data () from /usr/lib/libQtGui.so.4
#24 0x00002b8d6334bc84 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#25 0x00002b8d6334eacd in g_main_context_check () from /usr/lib/libglib-2.0.so.0
#26 0x00002b8d6334effe in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#27 0x00002b8d62f492c2 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4
#28 0x00002b8d618d3bcf in QX11Info::copyX11Data () from /usr/lib/libQtGui.so.4
#29 0x00002b8d62f28008 in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4
#30 0x00002b8d62f28119 in QEventLoop::exec () from /usr/lib/libQtCore.so.4
#31 0x00002b8d62f2a2e0 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4
#32 0x000000000040b75c in main (argc=1, argv=0x7fff494d0ef8) at main.cpp:12
##########################################################################################
... es scheint, dass es ein Problem in 'mapToScene ()' gibt.
Aber ich verstehe nicht, genau was geschieht.
Wie kann man Kanten und Knoten löschen, ohne Fehler?