From 885323e367884ab81c227a93102c1add2fd7ebb3 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 16 Jul 2022 18:43:54 +0200 Subject: [PATCH] Add OptionPageWidget with `paletteChanged()` signal --- settingsdialog/optionpage.cpp | 19 ++++++++++++++++++- settingsdialog/optionpage.h | 20 +++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/settingsdialog/optionpage.cpp b/settingsdialog/optionpage.cpp index 383247b..bdd8eab 100644 --- a/settingsdialog/optionpage.cpp +++ b/settingsdialog/optionpage.cpp @@ -1,11 +1,14 @@ #include "./optionpage.h" #include +#include #include #include #include #include +#include + namespace QtUtilities { /*! @@ -81,12 +84,26 @@ bool OptionPage::matches(const QString &searchKeyWord) m_keywords << groupBox->title(); m_keywordsInitialized = true; } - for (const QString &keyword : m_keywords) + for (const QString &keyword : std::as_const(m_keywords)) if (keyword.contains(searchKeyWord, Qt::CaseInsensitive)) return true; return false; } +/*! + * \brief Emits the paletteChanged() signal. + */ +bool OptionPageWidget::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::PaletteChange: + emit paletteChanged(); + break; + default:; + } + return QWidget::event(event); +} + /*! * \fn OptionPage::apply() * \brief Applies altered settings. diff --git a/settingsdialog/optionpage.h b/settingsdialog/optionpage.h index 39c8b10..99a64c0 100644 --- a/settingsdialog/optionpage.h +++ b/settingsdialog/optionpage.h @@ -12,6 +12,24 @@ namespace QtUtilities { class SettingsDialog; +class QT_UTILITIES_EXPORT OptionPageWidget : public QWidget { + Q_OBJECT + +public: + explicit OptionPageWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + +Q_SIGNALS: + void paletteChanged(); + +protected: + bool event(QEvent *) override; +}; + +inline OptionPageWidget::OptionPageWidget(QWidget *parent, Qt::WindowFlags f) + : QWidget(parent, f) +{ +} + class QT_UTILITIES_EXPORT OptionPage { friend class SettingsDialog; @@ -125,7 +143,7 @@ template UiFileBasedOptionPage::~UiFileBasedOptionPage( */ template QWidget *UiFileBasedOptionPage::setupWidget() { - QWidget *widget = new QWidget(); + QWidget *widget = new OptionPageWidget(); if (!m_ui) { m_ui.reset(new UiClass); }