This patch fixes some memory leaks. Memory leaks were caused by broken parent/child relations.
I only tested on Linux Mint 64bit. br, Boris..
From d5b645fbc4ee4b90e9d38b906f3525f5b4be1971 Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Wed, 15 Jan 2014 18:48:03 +0100 Subject: [PATCH] Fix some memory leaks. Signed-off-by: Boris Barbulovski <[email protected]> --- qt-ui/divelistview.cpp | 4 ++-- qt-ui/diveplanner.cpp | 2 +- qt-ui/globe.cpp | 2 +- qt-ui/maintab.cpp | 6 +++--- qt-ui/mainwindow.cpp | 5 ++++- qt-ui/modeldelegates.h | 2 +- qt-ui/models.cpp | 4 ++-- qt-ui/models.h | 2 +- qt-ui/printlayout.cpp | 2 +- qt-ui/profilegraphics.cpp | 2 +- qt-ui/tableview.cpp | 2 +- 11 files changed, 18 insertions(+), 15 deletions(-) diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 1b01a1c..3f8f6ce 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -25,9 +25,9 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), sortColumn(0), currentOrder(Qt::DescendingOrder), searchBox(new QLineEdit(this)) { - setItemDelegate(new DiveListDelegate ); + setItemDelegate(new DiveListDelegate(this)); setUniformRowHeights(true); - setItemDelegateForColumn(DiveTripModel::RATING, new StarWidgetsDelegate()); + setItemDelegateForColumn(DiveTripModel::RATING, new StarWidgetsDelegate(this)); QSortFilterProxyModel *model = new QSortFilterProxyModel(this); model->setSortRole(DiveTripModel::SORT_ROLE); model->setFilterKeyColumn(-1); // filter all columns diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 672cf9d..3e76008 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -961,7 +961,7 @@ DivePlannerWidget::DivePlannerWidget(QWidget* parent, Qt::WindowFlags f): QWidge view->setColumnHidden(CylindersModel::START, true); view->setColumnHidden(CylindersModel::END, true); view->setColumnHidden(CylindersModel::DEPTH, false); - view->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate()); + view->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate(this)); connect(ui.cylinderTableWidget, SIGNAL(addButtonClicked()), DivePlannerPointsModel::instance(), SLOT(addCylinder_clicked())); connect(ui.tableWidget, SIGNAL(addButtonClicked()), DivePlannerPointsModel::instance(), SLOT(addStop())); diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp index 19a1f53..862ed43 100644 --- a/qt-ui/globe.cpp +++ b/qt-ui/globe.cpp @@ -68,7 +68,7 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0), edit setMinimumHeight(0); setMinimumWidth(0); - fixZoomTimer = new QTimer(); + fixZoomTimer = new QTimer(this); connect(fixZoomTimer, SIGNAL(timeout()), this, SLOT(fixZoom())); fixZoomTimer->setSingleShot(true); installEventFilter(this); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 9fa94c8..701a01f 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -26,7 +26,7 @@ #include <QScrollBar> MainTab::MainTab(QWidget *parent) : QTabWidget(parent), - weightModel(new WeightModel()), + weightModel(new WeightModel(this)), cylindersModel(CylindersModel::instance()), editMode(NONE) { @@ -83,8 +83,8 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), connect(ui.cylinders->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editCylinderWidget(QModelIndex))); connect(ui.weights->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editWeightWidget(QModelIndex))); - ui.cylinders->view()->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate()); - ui.weights->view()->setItemDelegateForColumn(WeightModel::TYPE, new WSInfoDelegate()); + ui.cylinders->view()->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate(this)); + ui.weights->view()->setItemDelegateForColumn(WeightModel::TYPE, new WSInfoDelegate(this)); ui.cylinders->view()->setColumnHidden(CylindersModel::DEPTH, true); completers.buddy = new QCompleter(BuddyCompletionModel::instance(), ui.buddy); completers.divemaster = new QCompleter(DiveMasterCompletionModel::instance(), ui.divemaster); diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index a7a6346..37254f7 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -160,7 +160,10 @@ void MainWindow::on_actionClose_triggered() /* clear the selection and the statistics */ selected_dive = -1; - existing_filename = NULL; + if (existing_filename) { + free((void *)existing_filename); + existing_filename = NULL; + } cleanUpEmpty(); mark_divelist_changed(false); diff --git a/qt-ui/modeldelegates.h b/qt-ui/modeldelegates.h index 013a1c1..72f75b0 100644 --- a/qt-ui/modeldelegates.h +++ b/qt-ui/modeldelegates.h @@ -7,7 +7,7 @@ class QPainter; class DiveListDelegate : public QStyledItemDelegate{ public: - DiveListDelegate(){} + explicit DiveListDelegate(QObject *parent = 0): QStyledItemDelegate(parent){} QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const; }; diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 80f4073..f9e0280 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -31,7 +31,7 @@ QFont defaultModelFont() return font; } -CleanerTableModel::CleanerTableModel(): QAbstractTableModel() +CleanerTableModel::CleanerTableModel(QObject *parent): QAbstractTableModel(parent) { } @@ -343,7 +343,7 @@ void CylindersModel::remove(const QModelIndex& index) endRemoveRows(); } -WeightModel::WeightModel(QObject* parent): current(0), rows(0) +WeightModel::WeightModel(QObject* parent): CleanerTableModel(parent), current(0), rows(0) { //enum Column {REMOVE, TYPE, WEIGHT}; setHeaderDataStrings(QStringList() << tr("") << tr("Type") << tr("Weight")); diff --git a/qt-ui/models.h b/qt-ui/models.h index 16818e4..2d7e5c3 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -22,7 +22,7 @@ QFont defaultModelFont(); class CleanerTableModel : public QAbstractTableModel{ Q_OBJECT public: - CleanerTableModel(); + explicit CleanerTableModel(QObject *parent = 0); virtual int columnCount(const QModelIndex& parent = QModelIndex()) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; protected: diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp index b058bbc..c760687 100644 --- a/qt-ui/printlayout.cpp +++ b/qt-ui/printlayout.cpp @@ -265,7 +265,7 @@ QTableView *PrintLayout::createProfileTable(ProfilePrintModel *model, const int // resize table->resize(tableW, profilePrintTableMaxH); // hide the grid and set a stylesheet - table->setItemDelegate(new ProfilePrintDelegate()); + table->setItemDelegate(new ProfilePrintDelegate(this)); table->setShowGrid(false); table->setStyleSheet( "QTableView { border: none }" diff --git a/qt-ui/profilegraphics.cpp b/qt-ui/profilegraphics.cpp index 310d96f..dc4b544 100644 --- a/qt-ui/profilegraphics.cpp +++ b/qt-ui/profilegraphics.cpp @@ -59,7 +59,7 @@ ProfileGraphicsView::ProfileGraphicsView(QWidget* parent) : QGraphicsView(parent rulerEnabled = false; gc.printer = false; fill_profile_color(); - setScene(new QGraphicsScene()); + setScene(new QGraphicsScene(this)); scene()->installEventFilter(this); diff --git a/qt-ui/tableview.cpp b/qt-ui/tableview.cpp index 7c72b4b..66f221d 100644 --- a/qt-ui/tableview.cpp +++ b/qt-ui/tableview.cpp @@ -11,7 +11,7 @@ TableView::TableView(QWidget *parent) : QWidget(parent) { ui.setupUi(this); - ui.tableView->setItemDelegate(new DiveListDelegate); + ui.tableView->setItemDelegate(new DiveListDelegate(this)); /* There`s mostly a need for a Mac fix here too. */ if (qApp->style()->objectName() == "gtk+") ui.groupBox->layout()->setContentsMargins(0, 9, 0, 0); -- 1.8.3.2
_______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
