C++ QTextEdit不高亮显示简单的两行。我正在对Qt 5.13 MinGw x64使用QRegularExpression
我有一个最简单的最小工作示例来突出显示两行。下面显示了要高亮显示的两行。这两行是QTextEdit的唯一内容C++ QTextEdit不高亮显示简单的两行。我正在对Qt 5.13 MinGw x64使用QRegularExpression,c++,qt,qt5,qtextedit,qregularexpression,C++,Qt,Qt5,Qtextedit,Qregularexpression,我有一个最简单的最小工作示例来突出显示两行。下面显示了要高亮显示的两行。这两行是QTextEdit的唯一内容 开始 结束 使用QSyntaxHighlighter和qtexdit,我无法使用QRegularExpression突出显示这两行。工作代码如下所示。当使用QtCreater编译时,它不会给出任何警告,并且运行良好。我使用的是Qt5.13 MinGW x64。有趣的一点是,我使用的正则表达式在在线检查器中运行良好 最后,我希望看到这两行应该以红色显示。第一行包含单词“开始”,第二行包
开始 结束
使用QSyntaxHighlighter和qtexdit,我无法使用QRegularExpression突出显示这两行。工作代码如下所示。当使用QtCreater编译时,它不会给出任何警告,并且运行良好。我使用的是Qt5.13 MinGW x64。有趣的一点是,我使用的正则表达式在在线检查器中运行良好 最后,我希望看到这两行应该以红色显示。第一行包含单词“开始”,第二行包含单词“结束”。*请帮助 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);
}
}
mainwindow.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();
}
主窗口
#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;
};
#包括
#包括
#包括“mysyntaxhighlighter.h”
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=nullptr);
~main窗口();
私人:
Ui::MainWindow*Ui;
mySyntaxHighlighter*myHighlighter;
};
您假设文本是所有文本,但它只是一个块,我怀疑您的要求:如果“开始”和“结束”在同一行,是否应该突出显示?如果只有“开始”,那么必须突出显示以下文本,或者必须是“结束”?我问的最后一件事是,例如,C++编辑器通常会突出显示文本刚刚找到的注释“/*”,并在有“/”时完成,例如,文本可以以“/”开头,因此如果没有“*/”,所有文本都将突出显示。我的意思是,所有介于“开始”和“结束”之间的文本都应该突出显示。我使用非常简单的案例进行测试,但它们之间没有任何差异。另外,正如您所说,当“开始”和“结束”在同一行时,它会高亮显示。但这并不是必需的,因为他们将在不同的线路上。你的类比也是正确的,即“/*”相当于“开始”,“*/”相当于“结束”。但底线是,我试图用一个正则表达式来实现。你不能用一个正则表达式来实现,请查看Qt提供的第二个示例:谢谢。因此,如果您确认我们必须使用两个正则表达式来解决问题,那么,我将放弃这种方法。这里的主要吸引力在于“DotMatchesEverythingOption”选项。此外,在线正则表达式检查器按预期工作。谢谢您提供的信息。您假设文本是所有文本,但它只是一个块,我对您的要求有疑问:如果“开始”和“结束”在同一行,它们是否应该突出显示?如果只有“开始”,那么必须突出显示以下文本,或者必须是“结束”?我问的最后一件事是,例如,C++编辑器通常会突出显示文本刚刚找到的注释“/*”,并在有“/”时完成,例如,文本可以以“/”开头,因此如果没有“*/”,所有文本都将突出显示。我的意思是,所有介于“开始”和“结束”之间的文本都应该突出显示。我使用非常简单的案例进行测试,但它们之间没有任何差异。另外,正如您所说,当“开始”和“结束”在同一行时,它会高亮显示。但这并不是必需的,因为他们将在不同的线路上。你的类比也是正确的,即“/*”相当于“开始”,“*/”相当于“结束”。但底线是,我试图用一个正则表达式来实现。你不能用一个正则表达式来实现,请查看Qt提供的第二个示例:谢谢。因此,如果您确认我们必须使用两个正则表达式来解决问题,那么,我将放弃这种方法。这里的主要吸引力在于“DotMatchesEverythingOption”选项。此外,在线正则表达式检查器按预期工作。谢谢你的信息。