БлогNot. Qt: как запустить проект с QRegExp в Qt6 без переделок кода

Qt: как запустить проект с QRegExp в Qt6 без переделок кода

Проблема уже упоминалась вот здесь, но на практике переписывать приложения Qt 4-5 со сколько-нибудь реальным разбором текста, выполненным при помощи QRegExp, на Qt 6, где есть только QRegularExpression - занятие довольно трудоёмкое.

Проще добавить в проект собственный класс QRegExp, реализующий те немногие возможности стандартного QRegExp, что обычно применяются - у меня, например, в исходном проекте Qt5 использовались только методы indexIn и matchedLength. Основной класс проекта HtmlHighLighter, основанный на стандартном QSyntaxHighlighter, умеет разбирать HTML-разметку из текстового поля QTextEdit и подсвечивать разными цветами теги и атрибуты. Интерфейс приложения выполнен на основе этого проекта.

Ниже приводятся исходники "моего" класса QRegExp, скриншот приложения в работе и архив с проектом Qt6.

Файл qregexp.h
#ifndef QREGEXP_H
#define QREGEXP_H
#include <QRegularExpression>
class QRegExp {
public:
 QRegExp();
 QRegExp(const QString &pattern);
 int indexIn(const QString &str, int offset = 0);
 int matchedLength();
private:
 QString pattern;
 int mLength;
};
#endif // QREGEXP_H
Файл qregexp.cpp
#include "qregexp.h"

QRegExp::QRegExp() {
 this->mLength = -1;
}

QRegExp::QRegExp(const QString &pattern) {
 this->pattern = pattern;
}

int QRegExp::indexIn(const QString &str, int offset) {
 //Найти совпадение в str со смещением позиции offset (по умолчанию 0).
 //Возвращает позицию первого совпадения или -1, если совпадений не было.
 QRegularExpression q (pattern);
 QRegularExpressionMatch match = q.match(str,offset);
 bool hasMatch = match.hasMatch();
 if (!hasMatch) { this->mLength = -1; return -1; }
 int startOffset = match.capturedStart();
 int endOffset = match.capturedEnd();
 this->mLength = endOffset - startOffset;
 return startOffset;
}

int	QRegExp::matchedLength() {
 //Длина последней совпавшей строки или -1, если совпадений не было.
 return this->mLength;
}
Приложение HTML HighLighter в работе, скриншот
Приложение HTML HighLighter в работе, скриншот

 Скачать архив .zip с этим проектом Qt6, папка уже создана внутри архива (21 Кб)

Во многих случаях, если регулярка используется однократно, достаточно заменить ключевое слово QRegExp на QRegularExpression в описании выражения и соответствующем операторе #include.

06.09.2022, 20:15 [919 просмотров]


теги: программирование textprocessing html цвет qt

К этой статье пока нет комментариев, Ваш будет первым