diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-08-16 11:18:58 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-08-16 11:18:58 (GMT) |
commit | 7e395e4f5a89dd43d1b7b88f12e0fa4107756d54 (patch) | |
tree | 78c8d9fa559b5886f560bbe0c66773de0e66d6f9 /examples | |
parent | dc06f11f6e95c346b1a24a9612c6045a05ff985d (diff) | |
parent | 5dedcd3c4cac993949295d109804a8f7cc3a5b0a (diff) | |
download | Qt-7e395e4f5a89dd43d1b7b88f12e0fa4107756d54.zip Qt-7e395e4f5a89dd43d1b7b88f12e0fa4107756d54.tar.gz Qt-7e395e4f5a89dd43d1b7b88f12e0fa4107756d54.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2:
diagramscene example: fix leak and crashes.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/graphicsview/diagramscene/mainwindow.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/examples/graphicsview/diagramscene/mainwindow.cpp b/examples/graphicsview/diagramscene/mainwindow.cpp index f09c552..7d82df0 100644 --- a/examples/graphicsview/diagramscene/mainwindow.cpp +++ b/examples/graphicsview/diagramscene/mainwindow.cpp @@ -45,6 +45,7 @@ #include "diagramitem.h" #include "diagramscene.h" #include "diagramtextitem.h" +#include "arrow.h" const int InsertTextButton = 10; @@ -55,7 +56,7 @@ MainWindow::MainWindow() createToolBox(); createMenus(); - scene = new DiagramScene(itemMenu); + scene = new DiagramScene(itemMenu, this); scene->setSceneRect(QRectF(0, 0, 5000, 5000)); connect(scene, SIGNAL(itemInserted(DiagramItem*)), this, SLOT(itemInserted(DiagramItem*))); @@ -123,11 +124,22 @@ void MainWindow::buttonGroupClicked(int id) void MainWindow::deleteItem() { foreach (QGraphicsItem *item, scene->selectedItems()) { - if (item->type() == DiagramItem::Type) { - qgraphicsitem_cast<DiagramItem *>(item)->removeArrows(); + if (item->type() == Arrow::Type) { + scene->removeItem(item); + Arrow *arrow = qgraphicsitem_cast<Arrow *>(item); + arrow->startItem()->removeArrow(arrow); + arrow->endItem()->removeArrow(arrow); + delete item; } - scene->removeItem(item); } + + foreach (QGraphicsItem *item, scene->selectedItems()) { + if (item->type() == DiagramItem::Type) { + qgraphicsitem_cast<DiagramItem *>(item)->removeArrows(); + } + scene->removeItem(item); + delete item; + } } //! [3] @@ -313,7 +325,7 @@ void MainWindow::about() //! [21] void MainWindow::createToolBox() { - buttonGroup = new QButtonGroup; + buttonGroup = new QButtonGroup(this); buttonGroup->setExclusive(false); connect(buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(buttonGroupClicked(int))); @@ -345,7 +357,7 @@ void MainWindow::createToolBox() QWidget *itemWidget = new QWidget; itemWidget->setLayout(layout); - backgroundButtonGroup = new QButtonGroup; + backgroundButtonGroup = new QButtonGroup(this); connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(backgroundButtonGroupClicked(QAbstractButton*))); @@ -460,7 +472,6 @@ void MainWindow::createToolbars() editToolBar->addAction(sendBackAction); fontCombo = new QFontComboBox(); - fontSizeCombo = new QComboBox(); connect(fontCombo, SIGNAL(currentFontChanged(QFont)), this, SLOT(currentFontChanged(QFont))); @@ -526,7 +537,7 @@ void MainWindow::createToolbars() linePointerButton->setCheckable(true); linePointerButton->setIcon(QIcon(":/images/linepointer.png")); - pointerTypeGroup = new QButtonGroup; + pointerTypeGroup = new QButtonGroup(this); pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem)); pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine)); @@ -605,7 +616,7 @@ QMenu *MainWindow::createColorMenu(const char *slot, QColor defaultColor) names << tr("black") << tr("white") << tr("red") << tr("blue") << tr("yellow"); - QMenu *colorMenu = new QMenu; + QMenu *colorMenu = new QMenu(this); for (int i = 0; i < colors.count(); ++i) { QAction *action = new QAction(names.at(i), this); action->setData(colors.at(i)); |