diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-18 22:07:41 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-19 11:03:11 +0100 |
commit | db14f7047ba45cff42adb73eac0bce4034dd4a03 (patch) | |
tree | bb0c66df445cf389e63098f2ba7a603c03e0ed7c | |
parent | aa1cdb8a6138501aa76e7d208afac6598dad27a6 (diff) |
Migrate away from QRegExp
It will be moved to Qt5Compat, avoid depending on it where not
necessary.
Remove usages in Qt Designer, windeployqt and examples.
Change-Id: I5f5efc6999e60d995ebbc81fcaf80e7be08711b2
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
7 files changed, 43 insertions, 18 deletions
diff --git a/examples/assistant/simpletextviewer/findfiledialog.cpp b/examples/assistant/simpletextviewer/findfiledialog.cpp index cf64e9a6a..c9cfc8e09 100644 --- a/examples/assistant/simpletextviewer/findfiledialog.cpp +++ b/examples/assistant/simpletextviewer/findfiledialog.cpp @@ -59,6 +59,7 @@ #include <QHBoxLayout> #include <QLabel> #include <QPushButton> +#include <QRegularExpression> #include <QToolButton> #include <QTreeWidget> #include <QTreeWidgetItem> @@ -129,8 +130,10 @@ void FindFileDialog::update() void FindFileDialog::findFiles() { - QRegExp filePattern(fileNameComboBox->currentText() + "*"); - filePattern.setPatternSyntax(QRegExp::Wildcard); + QString wildCard = fileNameComboBox->currentText(); + if (!wildCard.endsWith('*')) + wildCard += '*'; + QRegularExpression filePattern(QRegularExpression::wildcardToRegularExpression(wildCard)); QDir directory(directoryComboBox->currentText()); @@ -138,7 +141,7 @@ void FindFileDialog::findFiles() QStringList matchingFiles; for (const QString &file : allFiles) { - if (filePattern.exactMatch(file)) + if (filePattern.match(file).hasMatch()) matchingFiles << file; } showFiles(matchingFiles); diff --git a/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp b/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp index 9863da25b..c2fcb40a5 100644 --- a/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp +++ b/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp @@ -482,9 +482,10 @@ QString WidgetBoxCategoryListView::widgetDomXml(const QDesignerWidgetBoxInterfac return domXml; } -void WidgetBoxCategoryListView::filter(const QRegExp &re) +void WidgetBoxCategoryListView::filter(const QString &needle, Qt::CaseSensitivity caseSensitivity) { - m_proxyModel->setFilterRegExp(re); + m_proxyModel->setFilterFixedString(needle); + m_proxyModel->setFilterCaseSensitivity(caseSensitivity); } QDesignerWidgetBoxInterface::Category WidgetBoxCategoryListView::category() const diff --git a/src/designer/src/components/widgetbox/widgetboxcategorylistview.h b/src/designer/src/components/widgetbox/widgetboxcategorylistview.h index 16e651dc2..bb476a6d8 100644 --- a/src/designer/src/components/widgetbox/widgetboxcategorylistview.h +++ b/src/designer/src/components/widgetbox/widgetboxcategorylistview.h @@ -40,7 +40,6 @@ class QDesignerFormEditorInterface; class QDesignerDnDItemInterface; class QSortFilterProxyModel; -class QRegExp; namespace qdesigner_internal { @@ -85,7 +84,7 @@ signals: void lastItemRemoved(); public slots: - void filter(const QRegExp &re); + void filter(const QString &needle, Qt::CaseSensitivity caseSensitivity); void removeCurrentItem(); void editCurrentItem(); diff --git a/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp b/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp index fc28aa222..9c1112eb8 100644 --- a/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp +++ b/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp @@ -966,7 +966,6 @@ void WidgetBoxTreeWidget::dropWidgets(const QVector<QDesignerDnDItemInterface*> void WidgetBoxTreeWidget::filter(const QString &f) { const bool empty = f.isEmpty(); - QRegExp re = empty ? QRegExp() : QRegExp(f, Qt::CaseInsensitive, QRegExp::FixedString); const int numTopLevels = topLevelItemCount(); bool changed = false; for (int i = 0; i < numTopLevels; i++) { @@ -974,7 +973,7 @@ void WidgetBoxTreeWidget::filter(const QString &f) WidgetBoxCategoryListView *categoryView = categoryViewAt(i); // Anything changed? -> Enable the category const int oldCount = categoryView->count(WidgetBoxCategoryListView::FilteredAccess); - categoryView->filter(re); + categoryView->filter(f, Qt::CaseInsensitive); const int newCount = categoryView->count(WidgetBoxCategoryListView::FilteredAccess); if (oldCount != newCount) { changed = true; diff --git a/src/designer/src/lib/shared/rcc.cpp b/src/designer/src/lib/shared/rcc.cpp index 050c6f418..6d271bd8a 100644 --- a/src/designer/src/lib/shared/rcc.cpp +++ b/src/designer/src/lib/shared/rcc.cpp @@ -38,7 +38,6 @@ #include <QtCore/qfile.h> #include <QtCore/qiodevice.h> #include <QtCore/qlocale.h> -#include <QtCore/qregexp.h> #include <QtCore/qstack.h> #include <QtCore/qxmlstream.h> @@ -951,6 +950,16 @@ void RCCResourceLibrary::writeAddNamespaceFunction(const QByteArray &name) } } +static bool unacceptableChar(QChar qc) +{ + if (qc.isDigit()) + return false; + if (!qc.isLetter()) + return true; + auto c = qc.toLower().toLatin1(); + return c < 'a' || c > 'z'; +} + bool RCCResourceLibrary::writeInitializer() { if (m_format == C_Code) { @@ -958,7 +967,8 @@ bool RCCResourceLibrary::writeInitializer() QString initName = m_initName; if (!initName.isEmpty()) { initName.prepend(QLatin1Char('_')); - initName.replace(QRegExp(QLatin1String("[^a-zA-Z0-9_]")), QLatin1String("_")); + std::replace_if(initName.begin(), initName.end(), + unacceptableChar, QLatin1Char('_')); } //init diff --git a/src/shared/findwidget/itemviewfindwidget.cpp b/src/shared/findwidget/itemviewfindwidget.cpp index 5c1a215fa..3ab73f094 100644 --- a/src/shared/findwidget/itemviewfindwidget.cpp +++ b/src/shared/findwidget/itemviewfindwidget.cpp @@ -65,6 +65,7 @@ #include <QtWidgets/QAbstractItemView> #include <QtWidgets/QCheckBox> #include <QtWidgets/QTreeView> +#include <QtCore/QRegularExpression> #include <algorithm> @@ -301,8 +302,12 @@ QModelIndex ItemViewFindWidget::findHelper(const QString &textToFind, bool skipC Qt::CaseSensitivity cs = caseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive; if (wholeWords()) { - QString rx = QLatin1String("\\b") + QRegExp::escape(textToFind) + QLatin1String("\\b"); - if (idx.data().toString().indexOf(QRegExp(rx, cs)) >= 0) + QString rx = QLatin1String("\\b") + QRegularExpression::escape(textToFind) + + QLatin1String("\\b"); + QRegularExpression re(rx); + if (cs == Qt::CaseInsensitive) + re.setPatternOptions(QRegularExpression::CaseInsensitiveOption); + if (idx.data().toString().indexOf(re) >= 0) return idx; } else { if (idx.data().toString().indexOf(textToFind, 0, cs) >= 0) diff --git a/src/windeployqt/main.cpp b/src/windeployqt/main.cpp index 4a50959b5..ed1a81a77 100644 --- a/src/windeployqt/main.cpp +++ b/src/windeployqt/main.cpp @@ -49,6 +49,7 @@ #include <algorithm> #include <iostream> +#include <iterator> #include <cstdio> QT_BEGIN_NAMESPACE @@ -1225,6 +1226,16 @@ static bool updateLibrary(const QString &sourceFileName, const QString &targetDi return true; } +// Find out the ICU version to add the data library icudtXX.dll, which does not +// show as a dependency. +static QString getIcuVersion(const QString &libName) +{ + QString version; + std::copy_if(libName.cbegin(), libName.cend(), std::back_inserter(version), + [](QChar c) { return c.isDigit(); }); + return version; +} + static DeployResult deploy(const Options &options, const QMap<QString, QString> &qmakeVariables, QString *errorMessage) @@ -1317,11 +1328,8 @@ static DeployResult deploy(const Options &options, if (!icuLibs.isEmpty()) { // Find out the ICU version to add the data library icudtXX.dll, which does not show // as a dependency. - QRegExp numberExpression(QStringLiteral("\\d+")); - Q_ASSERT(numberExpression.isValid()); - const int index = numberExpression.indexIn(icuLibs.front()); - if (index >= 0) { - const QString icuVersion = icuLibs.front().mid(index, numberExpression.matchedLength()); + const QString icuVersion = getIcuVersion(icuLibs.constFirst()); + if (!icuVersion.isEmpty()) { if (optVerboseLevel > 1) std::wcout << "Adding ICU version " << icuVersion << '\n'; icuLibs.push_back(QStringLiteral("icudt") + icuVersion + QLatin1String(windowsSharedLibrarySuffix)); |