Core: make options page keywords accessible

Can be used to search for specific settings.

Change-Id: I82579837d0595d01be04c3c7f3515854e6fabb87
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2022-10-05 07:00:08 +02:00
parent d5e12ddac4
commit 1b83c88eeb
2 changed files with 31 additions and 18 deletions

View File

@@ -91,6 +91,34 @@ void IOptionsPage::setWidgetCreator(const WidgetCreator &widgetCreator)
m_widgetCreator = widgetCreator;
}
/*!
\fn QStringList Core::IOptionsPage::keywords() const
Returns a list of ui strings that are used inside the widget.
*/
QStringList IOptionsPage::keywords() const
{
if (!m_keywordsInitialized) {
auto that = const_cast<IOptionsPage *>(this);
QWidget *widget = that->widget();
if (!widget)
return {};
// find common subwidgets
for (const QLabel *label : widget->findChildren<QLabel *>())
m_keywords << Utils::stripAccelerator(label->text());
for (const QCheckBox *checkbox : widget->findChildren<QCheckBox *>())
m_keywords << Utils::stripAccelerator(checkbox->text());
for (const QPushButton *pushButton : widget->findChildren<QPushButton *>())
m_keywords << Utils::stripAccelerator(pushButton->text());
for (const QGroupBox *groupBox : widget->findChildren<QGroupBox *>())
m_keywords << Utils::stripAccelerator(groupBox->title());
m_keywordsInitialized = true;
}
return m_keywords;
}
/*!
Returns the widget to show in the \uicontrol Options dialog. You should create a widget lazily here,
and delete it again in the finish() method. This method can be called multiple times, so you
@@ -242,24 +270,7 @@ const QList<IOptionsPage *> IOptionsPage::allOptionsPages()
*/
bool IOptionsPage::matches(const QRegularExpression &regexp) const
{
if (!m_keywordsInitialized) {
auto that = const_cast<IOptionsPage *>(this);
QWidget *widget = that->widget();
if (!widget)
return false;
// find common subwidgets
for (const QLabel *label : widget->findChildren<QLabel *>())
m_keywords << Utils::stripAccelerator(label->text());
for (const QCheckBox *checkbox : widget->findChildren<QCheckBox *>())
m_keywords << Utils::stripAccelerator(checkbox->text());
for (const QPushButton *pushButton : widget->findChildren<QPushButton *>())
m_keywords << Utils::stripAccelerator(pushButton->text());
for (const QGroupBox *groupBox : widget->findChildren<QGroupBox *>())
m_keywords << Utils::stripAccelerator(groupBox->title());
m_keywordsInitialized = true;
}
for (const QString &keyword : qAsConst(m_keywords))
for (const QString &keyword : keywords())
if (keyword.contains(regexp))
return true;
return false;

View File

@@ -46,6 +46,8 @@ public:
using WidgetCreator = std::function<IOptionsPageWidget *()>;
void setWidgetCreator(const WidgetCreator &widgetCreator);
QStringList keywords() const;
virtual bool matches(const QRegularExpression &regexp) const;
virtual QWidget *widget();
virtual void apply();