diff options
-rw-r--r-- | core/qthelper.h | 15 | ||||
-rw-r--r-- | desktop-widgets/filterwidget2.cpp | 21 |
2 files changed, 23 insertions, 13 deletions
diff --git a/core/qthelper.h b/core/qthelper.h index 2cc7dfec4..cbe2b77f0 100644 --- a/core/qthelper.h +++ b/core/qthelper.h @@ -116,6 +116,21 @@ void moveInVector(Vector &v, int rangeBegin, int rangeEnd, int destination) std::rotate(it + destination, it + rangeBegin, it + rangeEnd); } +// Qt overloads some signals(!) which can't therefore be used in connect() calls with +// pointers-to-member functions where the signatures of signal and slot don't match perfectly. +// For this case, Qt 5.7 provides the qOverload<> helper. +// Since we still support Qt 5.5 let's reimplement it here. +#if QT_VERSION < 0x050700 +template <typename... Args> +struct QOverload { + template <typename Ret, typename Class> + static Ret (Class::*of(Ret (Class::*fun)(Args...)))(Args...) + { + return fun; + } +}; +#endif + #endif // 3) Functions visible to C and C++ diff --git a/desktop-widgets/filterwidget2.cpp b/desktop-widgets/filterwidget2.cpp index 17e43f941..f106c354e 100644 --- a/desktop-widgets/filterwidget2.cpp +++ b/desktop-widgets/filterwidget2.cpp @@ -52,21 +52,16 @@ FilterWidget2::FilterWidget2(QWidget* parent) : connect(ui.minVisibility, &StarWidget::valueChanged, this, &FilterWidget2::updateFilter); - // We need these insane casts because Qt decided to function-overload some of their signals(!). - // QDoubleSpinBox::valueChanged() sends double and QString using the same signal name. - // QComboBox::currentIndexChanged() sends int and QString using the same signal name. - // Qt 5.7 provides a "convenient" helper that hides this, but only if compiling in C++14 - // or higher. One can then write: "QOverload<double>(&QDoubleSpinBox::valueChanged)", etc. - connect(ui.maxAirTemp, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), + connect(ui.maxAirTemp, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &FilterWidget2::updateFilter); - connect(ui.minAirTemp, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), + connect(ui.minAirTemp, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &FilterWidget2::updateFilter); - connect(ui.maxWaterTemp, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), + connect(ui.maxWaterTemp, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &FilterWidget2::updateFilter); - connect(ui.minWaterTemp, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), + connect(ui.minWaterTemp, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &FilterWidget2::updateFilter); connect(ui.fromDate, &QDateTimeEdit::dateChanged, @@ -84,25 +79,25 @@ FilterWidget2::FilterWidget2(QWidget* parent) : connect(ui.tags, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter); - connect(ui.tagsMode, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(ui.tagsMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FilterWidget2::updateFilter); connect(ui.people, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter); - connect(ui.peopleMode, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(ui.peopleMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FilterWidget2::updateFilter); connect(ui.location, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter); - connect(ui.locationMode, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(ui.locationMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FilterWidget2::updateFilter); connect(ui.suit, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter); - connect(ui.suitMode, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(ui.suitMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FilterWidget2::updateFilter); connect(ui.dnotes, &QLineEdit::textChanged, |