我有最简单的最小工作示例来突出显示两行。要突出显示的两行如下所示。这两行是 QTextEdit 的唯一内容。
开始
结尾
使用 QSyntaxHighlighter 和 QTextEdit,我无法使用 QRegularExpression 突出显示这两行。工作代码如下所示。使用 QtCreater 编译时,它给出零警告并且运行良好。我正在使用 Qt5.13 MinGW x64。有趣的一点是,我使用的 RegEx 在https://regex101.com/等在线检查器中运行良好。
最终我想看到两条线应该以红色显示。第一行包含单词“begin”,第二行包含单词“end”。*请帮忙。
mySyntaxHighlighter.h
class mySyntaxHighlighter : public QSyntaxHighlighter
{
Q_OBJECT
public:
explicit mySyntaxHighlighter(QTextDocument *document);
signals:
public slots:
protected:
void highlightBlock(const QString &text);
};
mySyntaxHighligher.cpp
#include "mysyntaxhighlighter.h"
mySyntaxHighlighter::mySyntaxHighlighter(QTextDocument *document) : QSyntaxHighlighter(document)
{
}
void mySyntaxHighlighter::highlightBlock(const QString &text) {
QTextCharFormat citeFormat;
citeFormat.setForeground(QColor(Qt::red));
citeFormat.setFontFamily("Consolas");
citeFormat.setFontPointSize(14);
QRegularExpression regex = QRegularExpression(QStringLiteral("begin(.*\n)+end"));
regex.setPatternOptions(QRegularExpression::DotMatchesEverythingOption);
QRegularExpressionMatchIterator i = regex.globalMatch(text);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
setFormat(match.capturedStart(), match.capturedLength(), citeFormat);
}
}
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mysyntaxhighlighter.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTextEdit *te = new QTextEdit(this);
te->setAcceptRichText(false);
te->setFontFamily("Consolas");
te->setFontPointSize(14);
te->setMinimumSize(1200, 600);
myHighlighter = new mySyntaxHighlighter(te->document());
setCentralWidget(te);
setMinimumWidth(1200);
te->setFocus();
}
主窗口.h
#include <QMainWindow>
#include <QTextEdit>
#include "mysyntaxhighlighter.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
mySyntaxHighlighter *myHighlighter;
};