1

我有最简单的最小工作示例来突出显示两行。要突出显示的两行如下所示。这两行是 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;
};
4

0 回答 0