From ab263c73f69e75216c8f647234394e8b00503f5b Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Mon, 18 Dec 2017 23:09:45 +0100 Subject: [PATCH] Fixed crash with lambas in connections of deleted objects --- .../models/bookingsmodel.cpp | 7 +++- .../advancedviewplugin/models/bookingsmodel.h | 1 + .../models/timeassignmentsmodel.cpp | 7 +++- plugins/updaterplugin/updaterdialog.cpp | 37 +++++++++++-------- plugins/updaterplugin/updaterdialog.h | 2 + plugins/updaterplugin/updaterplugin.cpp | 2 - zeiterfassunglib/mainwindow.h | 5 --- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/plugins/advancedviewplugin/models/bookingsmodel.cpp b/plugins/advancedviewplugin/models/bookingsmodel.cpp index 14ece31..4c59657 100644 --- a/plugins/advancedviewplugin/models/bookingsmodel.cpp +++ b/plugins/advancedviewplugin/models/bookingsmodel.cpp @@ -7,7 +7,7 @@ BookingsModel::BookingsModel(StripsWidget &stripsWidget, QObject *parent) : m_stripsWidget(stripsWidget) { connect(&stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged); - connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, [=](bool refreshing){ enabledChanged(!refreshing); }); + connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &BookingsModel::refreshingChanged); } StripsWidget &BookingsModel::stripsWidget() const @@ -86,3 +86,8 @@ void BookingsModel::bookingsChanged() beginResetModel(); endResetModel(); } + +void BookingsModel::refreshingChanged(bool refreshing) +{ + Q_EMIT enabledChanged(!refreshing); +} diff --git a/plugins/advancedviewplugin/models/bookingsmodel.h b/plugins/advancedviewplugin/models/bookingsmodel.h index 0c02b3e..9156d0e 100644 --- a/plugins/advancedviewplugin/models/bookingsmodel.h +++ b/plugins/advancedviewplugin/models/bookingsmodel.h @@ -32,6 +32,7 @@ Q_SIGNALS: private Q_SLOTS: void bookingsChanged(); + void refreshingChanged(bool refreshing); private: StripsWidget &m_stripsWidget; diff --git a/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp b/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp index b33930b..73a1a70 100644 --- a/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp +++ b/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp @@ -7,7 +7,7 @@ TimeAssignmentsModel::TimeAssignmentsModel(StripsWidget &stripsWidget, QObject * m_stripsWidget(stripsWidget) { connect(&stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged); - connect(&stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, [=](bool refreshing){ enabledChanged(!refreshing); }); + connect(&stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, this, &TimeAssignmentsModel::refreshingChanged); } StripsWidget &TimeAssignmentsModel::stripsWidget() const @@ -90,3 +90,8 @@ void TimeAssignmentsModel::timeAssignmentsChanged() beginResetModel(); endResetModel(); } + +void TimeAssignmentsModel::refreshingChanged(bool refreshing) +{ + Q_EMIT enabledChanged(!refreshing); +} diff --git a/plugins/updaterplugin/updaterdialog.cpp b/plugins/updaterplugin/updaterdialog.cpp index 3d4c560..55f5bdb 100644 --- a/plugins/updaterplugin/updaterdialog.cpp +++ b/plugins/updaterplugin/updaterdialog.cpp @@ -27,22 +27,8 @@ UpdaterDialog::UpdaterDialog(MainWindow &mainWindow) : setAttribute(Qt::WA_DeleteOnClose); - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [=]() { - if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); - - if(!QDesktopServices::openUrl(m_url)) - QMessageBox::warning(this, tr("Could not open default webbrowser!"), tr("Could not open default webbrowser!")); - - accept(); - }); - - connect(ui->buttonBox, &QDialogButtonBox::rejected, this, [=](){ - if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); - - reject(); - }); + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &UpdaterDialog::acceptedSlot); + connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &UpdaterDialog::rejectedSlot); auto url = m_mainWindow.settings().value(QStringLiteral("UpdaterPlugin/url"), QUrl(QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases"))).toUrl(); @@ -55,6 +41,25 @@ UpdaterDialog::~UpdaterDialog() delete ui; } +void UpdaterDialog::acceptedSlot() +{ + if(ui->checkBoxDontShow->isChecked()) + m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + + if(!QDesktopServices::openUrl(m_url)) + QMessageBox::warning(this, tr("Could not open default webbrowser!"), tr("Could not open default webbrowser!")); + + accept(); +} + +void UpdaterDialog::rejectedSlot() +{ + if(ui->checkBoxDontShow->isChecked()) + m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + + reject(); +} + void UpdaterDialog::finished() { if(m_reply->error() != QNetworkReply::NoError) diff --git a/plugins/updaterplugin/updaterdialog.h b/plugins/updaterplugin/updaterdialog.h index ba41f6e..9626d05 100644 --- a/plugins/updaterplugin/updaterdialog.h +++ b/plugins/updaterplugin/updaterdialog.h @@ -20,6 +20,8 @@ public: ~UpdaterDialog(); private Q_SLOTS: + void acceptedSlot(); + void rejectedSlot(); void finished(); private: diff --git a/plugins/updaterplugin/updaterplugin.cpp b/plugins/updaterplugin/updaterplugin.cpp index 24b5f51..13ad888 100644 --- a/plugins/updaterplugin/updaterplugin.cpp +++ b/plugins/updaterplugin/updaterplugin.cpp @@ -16,8 +16,6 @@ UpdaterPlugin::UpdaterPlugin(QObject *parent) : void UpdaterPlugin::attachTo(MainWindow &mainWindow) { - qDebug() << "called"; - if(mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate().isNull() || mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate() < QDate::currentDate()) new UpdaterDialog(mainWindow); diff --git a/zeiterfassunglib/mainwindow.h b/zeiterfassunglib/mainwindow.h index c74ae2a..6f30f71 100644 --- a/zeiterfassunglib/mainwindow.h +++ b/zeiterfassunglib/mainwindow.h @@ -19,8 +19,6 @@ namespace Ui { class MainWindow; } class ZeiterfassungSettings; class StripFactory; class StripsWidget; -class BookingsModel; -class TimeAssignmentsModel; class ZEITERFASSUNGLIBSHARED_EXPORT MainWindow : public QMainWindow { @@ -70,9 +68,6 @@ private: std::unique_ptr m_getProjectsReply; std::unique_ptr m_getAuswertungReply; - BookingsModel *m_bookingsModel; - TimeAssignmentsModel *m_timeAssignmentsModel; - QMap m_projects; QDate m_auswertungDate;