Fixed crash with lambas in connections of deleted objects

This commit is contained in:
0xFEEDC0DE64
2017-12-18 23:09:45 +01:00
parent 043d20c204
commit ab263c73f6
7 changed files with 36 additions and 25 deletions

View File

@@ -7,7 +7,7 @@ BookingsModel::BookingsModel(StripsWidget &stripsWidget, QObject *parent) :
m_stripsWidget(stripsWidget) m_stripsWidget(stripsWidget)
{ {
connect(&stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged); 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 StripsWidget &BookingsModel::stripsWidget() const
@@ -86,3 +86,8 @@ void BookingsModel::bookingsChanged()
beginResetModel(); beginResetModel();
endResetModel(); endResetModel();
} }
void BookingsModel::refreshingChanged(bool refreshing)
{
Q_EMIT enabledChanged(!refreshing);
}

View File

@@ -32,6 +32,7 @@ Q_SIGNALS:
private Q_SLOTS: private Q_SLOTS:
void bookingsChanged(); void bookingsChanged();
void refreshingChanged(bool refreshing);
private: private:
StripsWidget &m_stripsWidget; StripsWidget &m_stripsWidget;

View File

@@ -7,7 +7,7 @@ TimeAssignmentsModel::TimeAssignmentsModel(StripsWidget &stripsWidget, QObject *
m_stripsWidget(stripsWidget) m_stripsWidget(stripsWidget)
{ {
connect(&stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged); 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 StripsWidget &TimeAssignmentsModel::stripsWidget() const
@@ -90,3 +90,8 @@ void TimeAssignmentsModel::timeAssignmentsChanged()
beginResetModel(); beginResetModel();
endResetModel(); endResetModel();
} }
void TimeAssignmentsModel::refreshingChanged(bool refreshing)
{
Q_EMIT enabledChanged(!refreshing);
}

View File

@@ -27,22 +27,8 @@ UpdaterDialog::UpdaterDialog(MainWindow &mainWindow) :
setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_DeleteOnClose);
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [=]() { connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &UpdaterDialog::acceptedSlot);
if(ui->checkBoxDontShow->isChecked()) connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &UpdaterDialog::rejectedSlot);
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();
});
auto url = m_mainWindow.settings().value(QStringLiteral("UpdaterPlugin/url"), auto url = m_mainWindow.settings().value(QStringLiteral("UpdaterPlugin/url"),
QUrl(QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases"))).toUrl(); QUrl(QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases"))).toUrl();
@@ -55,6 +41,25 @@ UpdaterDialog::~UpdaterDialog()
delete ui; 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() void UpdaterDialog::finished()
{ {
if(m_reply->error() != QNetworkReply::NoError) if(m_reply->error() != QNetworkReply::NoError)

View File

@@ -20,6 +20,8 @@ public:
~UpdaterDialog(); ~UpdaterDialog();
private Q_SLOTS: private Q_SLOTS:
void acceptedSlot();
void rejectedSlot();
void finished(); void finished();
private: private:

View File

@@ -16,8 +16,6 @@ UpdaterPlugin::UpdaterPlugin(QObject *parent) :
void UpdaterPlugin::attachTo(MainWindow &mainWindow) void UpdaterPlugin::attachTo(MainWindow &mainWindow)
{ {
qDebug() << "called";
if(mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate().isNull() || if(mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate().isNull() ||
mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate() < QDate::currentDate()) mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate() < QDate::currentDate())
new UpdaterDialog(mainWindow); new UpdaterDialog(mainWindow);

View File

@@ -19,8 +19,6 @@ namespace Ui { class MainWindow; }
class ZeiterfassungSettings; class ZeiterfassungSettings;
class StripFactory; class StripFactory;
class StripsWidget; class StripsWidget;
class BookingsModel;
class TimeAssignmentsModel;
class ZEITERFASSUNGLIBSHARED_EXPORT MainWindow : public QMainWindow class ZEITERFASSUNGLIBSHARED_EXPORT MainWindow : public QMainWindow
{ {
@@ -70,9 +68,6 @@ private:
std::unique_ptr<GetProjectsReply> m_getProjectsReply; std::unique_ptr<GetProjectsReply> m_getProjectsReply;
std::unique_ptr<GetAuswertungReply> m_getAuswertungReply; std::unique_ptr<GetAuswertungReply> m_getAuswertungReply;
BookingsModel *m_bookingsModel;
TimeAssignmentsModel *m_timeAssignmentsModel;
QMap<QString, QString> m_projects; QMap<QString, QString> m_projects;
QDate m_auswertungDate; QDate m_auswertungDate;