广东律师事务所东莞网站建设,网站背景设计,wordpress 标题插件,济南免费建站Qt QPlainTextEdit高亮显示当前行 文章目录 Qt QPlainTextEdit高亮显示当前行摘要错误的代码正确的代码QTextEdit::ExtraSelection 关键字#xff1a;
Qt、
QPlainTextEdit、
QTextBlock、
ExtraSelection、
GPT 摘要
今天要在说一下GPT#xff0c;当下如果你还不会用G…
Qt QPlainTextEdit高亮显示当前行 文章目录 Qt QPlainTextEdit高亮显示当前行摘要错误的代码正确的代码QTextEdit::ExtraSelection 关键字
Qt、
QPlainTextEdit、
QTextBlock、
ExtraSelection、
GPT 摘要
今天要在说一下GPT当下如果你还不会用GPT那得推荐你学习一下这个东西可比百度好的的。如果没有GPT那我今天分享的内容还需要在手打一次了。因为我公司没有网代码也没法直接复制粘贴出来。
回到正题今天我们需要 在QPlainTextEdit中实现高亮当前行显示。
错误的代码
在这段代码中我们定义了一个HighlightCurrentLinePlainTextEdit类继承自QPlainTextEdit。我们重写了paintEvent来绘制背景色同时通过cursorPositionChanged信号来触发当前行的高亮。每当光标移动时highlightCurrentLine槽会被调用它会创建一个ExtraSelection来指定当前光标所在行的背景色并将它设置成QPlainTextEdit的extraSelections。
#include QPlainTextEdit
#include QPainter
#include QTextBlockclass HighlightCurrentLinePlainTextEdit : public QPlainTextEdit {Q_OBJECTpublic:HighlightCurrentLinePlainTextEdit(QWidget *parent nullptr) : QPlainTextEdit(parent) {connect(this, QPlainTextEdit::cursorPositionChanged,this, HighlightCurrentLinePlainTextEdit::highlightCurrentLine);highlightCurrentLine();}protected:void paintEvent(QPaintEvent *e) override {QPlainTextEdit::paintEvent(e);QPainter painter(viewport());QRect rect cursorRect();QRect lineRect QRect(0, rect.y(), viewport()-width(), rect.height());QColor color QColor(Qt::yellow).lighter(160);painter.fillRect(lineRect, color);}private slots:void highlightCurrentLine() {QListQTextEdit::ExtraSelection extraSelections;if (!isReadOnly()) {QTextEdit::ExtraSelection selection;QColor lineColor QColor(Qt::yellow).lighter(160);selection.format.setBackground(lineColor);selection.format.setProperty(QTextFormat::FullWidthSelection, true);selection.cursor textCursor();selection.cursor.clearSelection();extraSelections.append(selection);}setExtraSelections(extraSelections);}
};#include main.moc
如果按照上面的的写法你会发现你的文字就不见了所以还需要改良一下才可以用。
正确的代码
在这段代码中我们移除了paintEvent方法的覆写因为这个方法会影响文本的正常显示。我们通过ExtraSelections机制来高亮当前行它不会干扰文本的显示。
#include QApplication
#include QPlainTextEditclass HighlightCurrentLinePlainTextEdit : public QPlainTextEdit {
Q_OBJECTpublic:explicit HighlightCurrentLinePlainTextEdit(QWidget *parent nullptr) {connect(this, QPlainTextEdit::cursorPositionChanged, this, HighlightCurrentLinePlainTextEdit::highlightCurrentLine);// 初始化高亮highlightCurrentLine();}private slots:void highlightCurrentLine() {QListQTextEdit::ExtraSelection extraSelections;if (!isReadOnly()) {QTextEdit::ExtraSelection selection;QColor lineColor QColor(Qt::yellow).lighter(160);selection.format.setBackground(lineColor);selection.format.setProperty(QTextFormat::FullWidthSelection, true);selection.cursor textCursor();selection.cursor.clearSelection();extraSelections.append(selection);}setExtraSelections(extraSelections);}
};int main(int argc, char *argv[]) {QApplication a(argc, argv);HighlightCurrentLinePlainTextEdit editor;editor.show();return QApplication::exec();
}#include main.moc
QTextEdit::ExtraSelection
QTextEdit::ExtraSelection 是一个在 QTextEdit 控件中用来表示额外的文本选择的结构。在 Qt 框架中QTextEdit 是一个富文本编辑器控件它可以用来显示和编辑富文本文档。默认情况下用户可以在文本编辑器中选择文本但有时候开发者可能希望高亮显示文本的其他部分而不影响用户的当前选择。ExtraSelection 提供了这种功能。
ExtraSelection 结构有两个主要的成员 QTextCursor cursor这个 QTextCursor 用来指定要高亮显示的文本范围。你可以设置它选择一个词、一行或者文档中的任何段落。 QTextCharFormat format这个 QTextCharFormat 用来指定高亮显示的样式比如背景色、文本颜色、下划线等。
你可以创建一个 ExtraSelection 的列表并通过调用 QTextEdit 的 setExtraSelections() 方法来设置这个列表QTextEdit 将会绘制出这些额外的选择区域。这通常用于诸如代码高亮、拼写错误提示等场景。
以下是一个 QTextEdit::ExtraSelection 用法的简单例子
QTextEdit *editor new QTextEdit;// 创建一个额外的选择
QTextEdit::ExtraSelection selection;// 设置选择范围
selection.cursor QTextCursor(editor-document()-findBlockByNumber(10)); // 选择第11行假设行号从0开始
selection.cursor.select(QTextCursor::LineUnderCursor);// 设置选择的格式比如蓝色背景
selection.format.setBackground(Qt::blue);
selection.format.setForeground(Qt::white);// 应用额外的选择
editor-setExtraSelections(QListQTextEdit::ExtraSelection() selection);在这个例子中QTextEdit 的第11行将被一个蓝色背景和白色前景的样式高亮显示。这种方式不会干扰用户的正常选择而是作为一种额外的视觉提示。