diff options
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 21 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.h | 4 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol.cpp | 13 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol_p.h | 4 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 45 |
5 files changed, 87 insertions, 0 deletions
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index e3a45680ef..038d76a0fe 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -2534,6 +2534,27 @@ bool QTextEdit::find(const QRegExp &exp, QTextDocument::FindFlags options) #endif /*! + \fn bool QTextEdit::find(const QRegularExpression &exp, QTextDocument::FindFlags options) + + \since 5.13 + \overload + + Finds the next occurrence, matching the regular expression, \a exp, using the given + \a options. The QTextDocument::FindCaseSensitively option is ignored for this overload, + use QRegularExpression::CaseInsensitiveOption instead. + + Returns \c true if a match was found and changes the cursor to select the match; + otherwise returns \c false. +*/ +#if QT_CONFIG(regularexpression) +bool QTextEdit::find(const QRegularExpression &exp, QTextDocument::FindFlags options) +{ + Q_D(QTextEdit); + return d->control->find(exp, options); +} +#endif + +/*! \fn void QTextEdit::copyAvailable(bool yes) This signal is emitted when text is selected or de-selected in the diff --git a/src/widgets/widgets/qtextedit.h b/src/widgets/widgets/qtextedit.h index 51d6c2ccba..3aa23aaace 100644 --- a/src/widgets/widgets/qtextedit.h +++ b/src/widgets/widgets/qtextedit.h @@ -57,6 +57,7 @@ class QMenu; class QTextEditPrivate; class QMimeData; class QPagedPaintDevice; +class QRegularExpression; class Q_WIDGETS_EXPORT QTextEdit : public QAbstractScrollArea { @@ -165,6 +166,9 @@ public: #ifndef QT_NO_REGEXP bool find(const QRegExp &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); #endif +#if QT_CONFIG(regularexpression) + bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +#endif QString toPlainText() const; #ifndef QT_NO_TEXTHTMLPARSER diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index e179ea3b40..77351d3346 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -3094,6 +3094,19 @@ bool QWidgetTextControl::find(const QRegExp &exp, QTextDocument::FindFlags optio } #endif +#if QT_CONFIG(regularexpression) +bool QWidgetTextControl::find(const QRegularExpression &exp, QTextDocument::FindFlags options) +{ + Q_D(QWidgetTextControl); + QTextCursor search = d->doc->find(exp, d->cursor, options); + if (search.isNull()) + return false; + + setTextCursor(search); + return true; +} +#endif + QString QWidgetTextControl::toPlainText() const { return document()->toPlainText(); diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h index 4b2acbd934..5431298387 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p.h @@ -80,6 +80,7 @@ class QMenu; class QWidgetTextControlPrivate; class QAbstractScrollArea; class QEvent; +class QRegularExpression; class QTimerEvent; class Q_WIDGETS_EXPORT QWidgetTextControl : public QInputControl @@ -119,6 +120,9 @@ public: #ifndef QT_NO_REGEXP bool find(const QRegExp &exp, QTextDocument::FindFlags options = 0); #endif +#if QT_CONFIG(regularexpression) + bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = 0); +#endif QString toPlainText() const; #ifndef QT_NO_TEXTHTMLPARSER diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 6a2ae4951b..5f5cd78215 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -199,6 +199,12 @@ private slots: void findWithRegExpReturnsFalseIfNoMoreResults(); #endif +#if QT_CONFIG(regularexpression) + void findWithRegularExpression(); + void findBackwardWithRegularExpression(); + void findWithRegularExpressionReturnsFalseIfNoMoreResults(); +#endif + #if QT_CONFIG(wheelevent) void wheelEvent(); #endif @@ -2572,6 +2578,45 @@ void tst_QTextEdit::findWithRegExpReturnsFalseIfNoMoreResults() } #endif +#if QT_CONFIG(regularexpression) +void tst_QTextEdit::findWithRegularExpression() +{ + ed->setHtml(QStringLiteral("arbitrary te<span style=\"color:#ff0000\">xt</span>")); + QRegularExpression rx("\\w{2}xt"); + + bool found = ed->find(rx); + + QVERIFY(found); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} + +void tst_QTextEdit::findBackwardWithRegularExpression() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QTextCursor cursor = ed->textCursor(); + cursor.movePosition(QTextCursor::End); + ed->setTextCursor(cursor); + QRegularExpression rx("a\\w*t"); + + bool found = ed->find(rx, QTextDocument::FindBackward); + + QVERIFY(found); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("arbit")); +} + +void tst_QTextEdit::findWithRegularExpressionReturnsFalseIfNoMoreResults() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QRegularExpression rx("t.xt"); + ed->find(rx); + + bool found = ed->find(rx); + + QVERIFY(!found); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} +#endif + #if QT_CONFIG(wheelevent) class TextEdit : public QTextEdit |