diff options
author | Arno <am@disconnect.de> | 2010-12-30 14:47:12 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-12-30 14:47:12 +0100 |
commit | 3c508cad0032f46be56279f3a3ab5a7df9128bef (patch) | |
tree | 5752a0abf3f347dae52288522f39abbf9ea79058 | |
parent | 9fa92d359003485e21aa1a1d81545f63cf4d08da (diff) | |
download | SheMov-3c508cad0032f46be56279f3a3ab5a7df9128bef.tar.gz SheMov-3c508cad0032f46be56279f3a3ab5a7df9128bef.tar.bz2 SheMov-3c508cad0032f46be56279f3a3ab5a7df9128bef.zip |
Fix qWarnings() at startup and shutdown
Fix unexpected NULL receiver on startup: Turns out this warning is
issued when calling deleteLater on a NULL object. This happened in
SheMov::createOpenWith*.
The "database is still in use" warning was a bit harder to track down.
First of all, the destructors weren't called since Qt::WA_DeleteOnClose
wasn't set for SheMov, so Qt would simply exit and let the OS do the
cleanup without calling the destructors.
Then there were several orphan widgets/objects without a parent, so
their destructor would never be called.
-rw-r--r-- | archivetreeview.cpp | 4 | ||||
-rw-r--r-- | archivetreeview.h | 1 | ||||
-rw-r--r-- | filestreemodel.cpp | 1 | ||||
-rw-r--r-- | filesystemwidget.cpp | 2 | ||||
-rw-r--r-- | seriestreewidget.cpp | 9 | ||||
-rw-r--r-- | seriestreewidget.h | 1 | ||||
-rw-r--r-- | shemov.cpp | 7 | ||||
-rw-r--r-- | shemov.h | 2 | ||||
-rw-r--r-- | smglobals.cpp | 1 |
9 files changed, 20 insertions, 8 deletions
diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 16699dc..3e9e783 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -51,7 +51,7 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ mGenresModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("genres")); // series view - mSeriesWidget = new SeriesTreeWidget; + mSeriesWidget = new SeriesTreeWidget(this); QItemSelectionModel *selModel = mSeriesWidget->seriesTree()->selectionModel(); connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(currentChanged(QItemSelection,QItemSelection))); connect(mSeriesWidget->seriesTree(), SIGNAL(doubleClicked(QModelIndex)), this, SLOT(playSelected())); @@ -384,7 +384,7 @@ NoCoverMovieDialog::NoCoverMovieDialog(QWidget *parent, Qt::WindowFlags flags) : //model + view mView = new NoCoverMovieView; QStringList headers = QStringList() << "Movie" << "Name" << "Part" << "Id"; - mModel = new NoCoverMovieModel(headers); + mModel = new NoCoverMovieModel(headers, this); mView->setModel(mModel); connect(mModel, SIGNAL(refreshed()), this, SLOT(updateLabel())); mView->setColumnHidden(1, true); diff --git a/archivetreeview.h b/archivetreeview.h index e2c0a9d..ad1d3f1 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -36,6 +36,7 @@ class ArchiveTreeView : public QWidget public: enum CopyType { WindowsDir, WindowsFullPath, UnixDir, UnixFullPath }; explicit ArchiveTreeView(QWidget *parent = 0); + virtual ~ArchiveTreeView() {} SeriesTreeWidget *seriesWidget() { return mSeriesWidget; } FilesTreeWidget *filesWidget() { return mFilesWidget; } const QString windowTitle() { return mWindowTitle; } diff --git a/filestreemodel.cpp b/filestreemodel.cpp index f4d045f..33c5be4 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -73,6 +73,7 @@ FilesTreeModel::~FilesTreeModel(){ delete mUpdateDvdQuery; delete mUpdateQualityQuery; delete mUpdatePartNoQuery; + delete mUpdateFileTypeQuery; delete mInsertFileQuery; delete mFilesQuery; delete mDeleteFileQuery; diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index f4a9d24..38edbab 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -39,7 +39,7 @@ #include "smglobals.h" FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboardMode(None) { - mModel = new FileSystemModel; + mModel = new FileSystemModel(this); mModel->setRootPath("/"); mModel->setFilter(QDir::AllEntries | QDir::NoDot); mModel->setReadOnly(false); diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 19617a7..fa6ded5 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -92,6 +92,14 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ connect(mCompleterProducer, SIGNAL(done(QStringListModel*)), this, SLOT(producerFinished(QStringListModel*))); } +SeriesTreeWidget::~SeriesTreeWidget(){ + if(mCompleterProducerThread->isRunning()){ + mCompleterProducerThread->terminate(); + } + delete mCompleterProducerThread; + delete mCompleterProducer; +} + void SeriesTreeWidget::newSeries(){ QList<QVariant> data; data << tr("<New series>") << QVariant() << QVariant() << QVariant() << SeriesTreeModel::NewSeries; @@ -535,6 +543,7 @@ CompleterProducer::~CompleterProducer(){ delete mQualityQuery; delete mDvdNoQuery; mDb.close(); + mDb = QSqlDatabase(); } void CompleterProducer::produce(){ diff --git a/seriestreewidget.h b/seriestreewidget.h index 02a6693..f177943 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -39,6 +39,7 @@ class SeriesTreeWidget : public QWidget { public: enum FilterMode { FilterSeries = 1, FilterActor = 2, FilterGenre = 3, FilterSize = 4, FilterQuality = 5, FilterFileName = 6, FilterDvdNo = 7 }; explicit SeriesTreeWidget(QWidget *parent = 0); + virtual ~SeriesTreeWidget(); SeriesTreeView *seriesTree() { return mView; } SeriesTreeSortModel *seriesProxy() { return mProxy; } int filterMode() const { return mFilterMode; } @@ -51,6 +51,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) { //application icon qApp->setWindowIcon(QIcon(":/shemov.png")); + setAttribute(Qt::WA_DeleteOnClose); //init database as early as possible (void) SmGlobals::instance(); @@ -768,8 +769,8 @@ void SheMov::createOpenWithMenuFS(){ foreach(QAction *a, mOpenWithGroupFS->actions()){ mOpenWithMenuFS->removeAction(a); } + mOpenWithGroupFS->deleteLater(); } - mOpenWithGroupFS->deleteLater(); mOpenWithGroupFS = new QActionGroup(this); QSettings s; QStringList moviePlayers = s.value("programs_movieviewer/data").toHash().keys(); @@ -798,9 +799,9 @@ void SheMov::createOpenWithMenuAV(){ foreach(QAction *a, mOpenWithGroupAV->actions()){ mOpenWithMenuAV->removeAction(a); } + //this deletes all actions in the group also! + mOpenWithGroupAV->deleteLater(); } - //this deletes all actions in the group also! - mOpenWithGroupAV->deleteLater(); mOpenWithGroupAV = new QActionGroup(this); QSettings s; QStringList players = s.value("programs_movieviewer/data").toHash().keys(); @@ -27,7 +27,7 @@ class SheMov : public QMainWindow { Q_OBJECT public: SheMov(QWidget *parent = 0, Qt::WindowFlags flags = 0); - ~SheMov() {} + virtual ~SheMov() {} protected: virtual void closeEvent(QCloseEvent *event); diff --git a/smglobals.cpp b/smglobals.cpp index e5b4df8..52b3805 100644 --- a/smglobals.cpp +++ b/smglobals.cpp @@ -33,7 +33,6 @@ SmGlobals::~SmGlobals(){ foreach(QAbstractItemModel *model, mModels.values()){ delete model; } - QSqlDatabase::removeDatabase("treedb"); delete mFrameCache; } |