养生
syntaxhighlighter(QTextDocument、QSyntaxHighlighter)

QTextdocument

一、描述

此类用来储存结构化的富文本文档。

二、类型成员

1、enum QTextdocument::FindFlag:此枚举描述查找函数可用的选项。这些选项可以用“|”组合:

  • FindBackward:向后搜索。
  • FindCaseSensitive:不区分大小写。
  • FindWholeWords:查找仅匹配完整的单词。

2、enum QTextdocument::metaInformation:此枚举描述了可以添加到文档中的不同类型的元信息。

  • documentTitle:文档的标题。
  • documentUrl:文档的url。loadResource() 函数在加载相关资源时使用此url作为基础。
  • CssMedia:此值用于在调用 setHtml() 时从指定的CSS样式表中选择相应的“@media”规则。

3、enum QTextdocument::ResourceType:此枚举描述可由 loadResource() 函数或QTextBrowser::setSource() 加载的资源类型。

  • UnknownResource:未加载资源,或资源类型未知。
  • HtmlResource:资源包含HTML。
  • ImageResource:资源包含图像数据。
  • StyleSheetResource:资源包含CSS。
  • MarkdownResource:资源包含Markdown。
  • UserResource:用户定义的资源类型的第一个可用值。

三、属性成员

1、baseUrl : QUrl

用于解析文档中相对资源URL的基URL。

资源URL被解析为与基URL的目标位于同一目录中,即着路径中最后一个“/”之后的任何部分都将被忽略。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

2、blockCount : const int

文档中文本块的数量。

此属性的值在具有表格(QTextTable)或框架(QTextframe)的文档中未定义。

默认情况下,如果已定义,则值为1。

3、defaultFont : QFont

用于显示文档文本的默认字体。

4、defaultStyleSheet : QString

默认样式表,应用于插入到文档中的所有新HTML格式文本(使用 setHtml() 或 QTextCursor::insertHtml() 插入)。

更改默认样式表不会对文档的现有内容产生任何影响。

5、defaultTextOption : QTextOption

文档中所有 QTextLayout 的默认文本选项。

创建 QTextBlocks 时,将在其 QTextLayout 上设置 defaultTextOption。

这可用来设置文档的全局属性,例如默认换行模式。

6、documentMargin : qreal

文档周围的边距。默认值为4。

7、indentWidth : qreal

文本列表(QTextList)和文本块(QTextBlock)缩进的宽度。默认为40。

8、layoutEnabled : bool

每次更改后 QTextdocument 是否应重新计算布局。默认为 true。

为 true,则对文档的任何更改都会触发布局。

为 false,则进行多次更改在最后只布局一次。

9、maximumBlockCount : int

文档文本块的最大数目。如果文档中所有的文本块超过此数目,则将从文档开头删除块。

负值或0表示无限制。默认值为0。此属性在具有表或框架的文档中未定义。

10、modified : bool

文档是否已被用户修改。默认为false。

11、pageSize : QSizeF

布置文档的页面大小。单位由基础绘制设备确定。在屏幕上绘制时,尺寸以逻辑像素为单位,在打印机上作画时以点数(1/72英寸)为单位。

12、size : const QSizeF

文档的实际大小,相当于 documentLayout()->documentSize()。可以通过设置文本宽度(textWidth)或设置页面大小(pageSize)来更改文档的大小。

13、textWidth : qreal

文档中文本的首选宽度。当文本的宽度大于此属性值时,如果文本可以拆分则将其拆分为多行。

若设置为-1,则只有当通过显式换行符或新段落强制换行时文本才会被拆分。默认值为-1。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

14、undoRedoEnabled : bool

是否为此文档启用了撤消/回撤。默认为true。

如果禁用,将清除撤消堆栈,并且不会向其中添加任何项。

15、useDesignMetrics : bool

文档是否使用字体的 QFontMetrics 来提高文本布局的准确性。默认为 false。

设置为 false 则根据 QAbstractTextdocumentLayout::setPaintDevice() 上设置的绘制设备参数布局。

四、成员函数

1、【信号】void blockCountChanged(int newBlockCount)

文档中的文本块总数发生变化时发出此信号。

2、【信号】void contentsChange(int position, int charsRemoved, int charsAdded)

文档内容发生变化时发出此信号。例如插入或删除文本或应用格式时。

position 为发生更改的字符位置、charsRemoved 为删除的字符数、charsAdded 为添加的字符数。

3、【信号】void cursorPositionChanged(const QTextCursor &cursor)

光标的位置由于编辑操作而改变时发出此信号。更改的光标为 cursor。

4、【信号】void modificationChanged(bool changed)

文档内容以影响修改状态的方式更改时发出此信号。

5、void redo() / void undo()

回撤/撤消文档上的最后一次编辑操作。

void redo(QTextCursor *cursor) / void undo(QTextCursor *cursor)

如果可以回撤 / 撤消,则回撤 / 撤消文档上的最后一次编辑操作。cursor 位于回撤 / 撤消编辑操作的位置的末尾。

int availableRedoSteps() / int availableUndoSteps()

可用的回撤 / 撤销步骤数。

bool isRedoAvailable() / bool isUndoAvailable()

是否可以回撤 / 撤销。

6、【信号】void redoAvailable(bool available)

回撤操作的可用性变化时发出此信号。

7、【信号】void undoCommandAdded()

向文档添加可撤消内容时都会发出此信号。

8、void addResource(int type, const QUrl &name, const QVariant &resource)

使用 type 和 name 作为标识符,将资源 resource 添加到资源缓存中。type 是 ResourceType 中的值。

将图像添加为资源,从文档中引用它:

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

9、void adjustSize()

将文档调整为合理大小。

qreal idealWidth()

返回文本文档的理想宽度。理想宽度是文档的实际使用宽度,不考虑可选对齐方式。

10、QList<QTextFormat> allFormats()

返回文档中使用文本格式列表。

11、QTextBlock begin() / QTextBlock firstBlock()

文档的第一个文本块。

QTextBlock end()

返回的文本块无效,表示文档中最后一个块之后的块。

for (QTextBlock it = doc->begin(); it != doc->end(); it = it.next())std::cout << it.text().toStdString() << "\n";QTextBlock findBlock(int pos)

返回包含第 pos 个字符的文本块。

QTextBlock lastBlock()

返回文档最后一个有效的文本块。

QTextBlock findBlockByLineNumber(int lineNumber)

返回第 lineNumber 行的文本块。从0开始算。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

QTextBlock findBlockByNumber(int blockNumber)

返回第 blockNumber 个文本块。

12、QChar characterAt(int pos)

返回位置pos处的字符,如果pos超出范围,则返回空字符。

13、int characterCount()

返回此文档的字符数。

14、void clear()

清除文档。

15、void clearUndoRedoStacks(QTextdocument::Stacks stacksToClear = UndoAndRedoStacks)

清除指定的堆栈。

16、QTextdocument * clone(QObject *parent = nullptr)

创建一个新的QTextdocument,它是此文本文档的副本。parent 是返回文本文档的父级。

17、void drawContents(QPainter *p, const QRectF &rect = QRectF())

使用画笔p绘制文档的内容,剪切为 rect 范围的内容。如果 rect 是一个空矩形,那么将不剪切。

18、QTextCursor find(const QString &subString, const QTextCursor &cursor, QTextdocument::FindFlags options = FindFlags())

查找文档中的子字符串subString。搜索从给定光标 cursor 的位置开始。

如果找到了subString,则返回具有所选匹配项的光标;否则返回空光标。

默认情况下,搜索不区分大小写,可以匹配文档中任何位置的文本。

QTextCursor find(const QString &subString, int position = 0, QTextdocument::FindFlags options = FindFlags())

搜索从给定位置 position 开始。如果 position 为 0,则搜索从文档开头开始。

QTextCursor find(const QRegularexpression &expr, int from = 0, QTextdocument::FindFlags options = FindFlags())

搜索从给定的 from 位置开始。

QTextCursor find(const QRegularexpression &expr, const QTextCursor &cursor, QTextdocument::FindFlags options = FindFlags())

搜索从给定光标 cursor 的位置开始。

19、int lineCount()

返回文档的行数。

20、QVariant loadResource(int type, const QUrl &name)

从具有给定名称的资源加载指定类型的数据。type 是 ResourceType 的值。

QVariant resource(int type, const QUrl &name)

返回指定类型的数据。如果在缓存中找不到资源,则调用 loadResource() 尝试加载资源。

21、int pageCount()

返回此文档中的页数。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

22、void print(QPagedPaintDevice *printer)

打印文档。

23、int revision()

返回文档的修订版本值。当编辑文档时,修订版本的值会增加。

24、QTextframe * rootframe()

返回文档的根框架。

25、void setbaselineOffset(qreal baseline)

设置在文档布局中使用的字体高度的百分比的基线。默认值为0。正值将文本上移相应的百分比,负值则向下移动。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

26、void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)

设置默认光标移动样式。

  • Qt::LogicalMoveStyle:在从左到右的文本块内,按左箭头键时减少光标位置,按右箭头键时增加光标位置。如果文本块是从右到左的,则应用相反的行为。
  • Qt::VisualMoveStyle:按下左箭头键将始终使光标向左移动,无论文本的书写方向如何。 按右箭头键将始终使光标向右移动。

27、void setHtml(const QString &html) / void setPlainText(const QString &text)

替换文档的全部内容。调用此函数时,将重置撤消/回撤历史记录。

QString toHtml()

返回包含文档的HTML表示形式的字符串。

文档内容指定其编码为UTF-8。如果要将返回的 html 字符串转换为字节数组以通过网络传输或保存到磁盘时,应使用 QString::toUtf8() 将字符串转换为 QByteArray。

QString toPlainText()

返回文档中包含的纯文本。与 toRawText() 相比,此函数将用 ASCII 字符替换某些 unicode 字符。

QString toRawText()

返回文档中包含的原始文本,不包含任何格式信息。

28、void setMarkdown(const QString &markdown, QTextdocument::MarkdownFeatures features = MarkdownDialectGitHub)

使用 Markdown 格式文本替换文档的全部内容。调用此函数时,将重置撤消/回撤历史记录。

可以通过 features 参数启用或禁用解析器的某些功能:

  • Markdown NoHTML:Markdown文本中的任何HTML标记都将被丢弃
  • MarkdownDialectCommonMark:解析器仅支持 CommonMark 标准化的功能
  • MarkdownDialectGitHub:默认值,解析器支持GitHub特性
QString toMarkdown(QTextdocument::MarkdownFeatures features = MarkdownDialectGitHub)

返回含具有给定特性的文档的 Markdown 表示形式的字符串。

29、void setmetaInformation(QTextdocument::metaInformation info, const QString &string)

设置文档元信息。

30、void setSubscriptbaseline(qreal baseline) / void setSuperscriptbaseline(qreal baseline)

设置下标 / 上标要在文档布局中使用的字体高度的百分比。

默认值:下标为16.67%(高度的1/6);上标为 50%(高度的1/2)。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:ntent="mp" data-source="outerlink" href="http://docs.qq.com/doc/DUlVwTW1FZlZuWE9G" rel="noopener noreferrer noopener noreferrer" target="_blank">「链接」


QSyntaxHighlighter

一、描述

此类用于自定义语法高亮显示规则,是用于实现 QTextdocument 文本高亮显示的基类。

要自定义语法高亮显示,必须子类化 QSyntaxHighlighter 并重新实现 highlightBlock()。此函数将在合适的时机自动被调用。

highlightBlock() 函数将格式设置应用于传递给它的文本。setFormat() 函数将给定的QTextCharFormat 应用于当前文本块。例如:

class MyHighlighter : public QSyntaxHighlighter{Q_OBJECTpublic:MyHighlighter(QTextdocument *parent = nullptr): QSyntaxHighlighter(parent){}protected:void highlightBlock(const QString &text) override;};void MyHighlighter::highlightBlock(const QString &text){QTextCharFormat matchFormat;matchFormat.setFontWeight(QFont::Bold);matchFormat.setForeground(Qt::red);static QRegularexpression expression{"\\bname=[A-Za-z]+\\b"};QRegularexpressionMatchIterator i = expression.globalMatch(text);while (i.hasNext()){QRegularexpressionMatch match = i.next();setFormat(match.capturedStart(), match.capturedLength(), matchFormat);}}MyHighlighter *highlighter = new MyHighlighter(ui->textEdit->document());
QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

编辑框中匹配正则表达式的内容被设置为指定的格式。

二、成员函数

1、void rehighlight()

将高亮显示重新应用于整个文档。

2、void rehighlightBlock(const QTextBlock &block)

将高亮显示重新应用于文本块。

3、QTextBlock currentBlock()

当前文本块。

4、void highlightBlock(const QString &text)

高亮显示给定的文本块。富文本引擎在必要时调用此函数,即在已更改的文本块上调用。

5、void setCurrentBlockUserData(QTextBlockUserData *data)

QTextBlockUserData 类用于将自定义数据与文本块相关联。

此函数将 data 附着到当前文本块。

struct info{QString name;int age;};struct Blockdata: public QTextBlockUserData{QList<info> infoList;};class MyHighlighter : public QSyntaxHighlighter{Q_OBJECTpublic:MyHighlighter(QTextdocument *parent = nullptr): QSyntaxHighlighter(parent){}protected:void highlightBlock(const QString &text) override;};void MyHighlighter::highlightBlock(const QString &text){QTextCharFormat matchFormat;matchFormat.setFontWeight(QFont::Bold);matchFormat.setForeground(Qt::red);static QRegularexpression expression{"\\bname=[A-Za-z]+\\b"};QRegularexpressionMatchIterator i = expression.globalMatch(text);int number{1};while (i.hasNext()){QRegularexpressionMatch match = i.next();setFormat(match.capturedStart(), match.capturedLength(), matchFormat);QList<info> infoList;info data;data.name = QString("name%1").arg(number);data.age = number;infoList << data;++number;data.name = QString("name%1").arg(number);data.age = number;infoList << data;++number;BlockData * bd = new BlockData;bd->infoList = infoList;setCurrentBlockUserData(bd);}}Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);MyHighlighter *highlighter = new MyHighlighter(ui->textEdit->document());}Widget::~Widget(){delete ui;}void Widget::on_pushButton_clicked(){QTextBlock currentBlock = ui->textEdit->document()->begin();while (currentBlock.isValid()){currentBlock = currentBlock.next();if(auto bd = static_cast<BlockData*>(currentBlock.userData())){qDebug()<<"xxx";for(const info &data: bd->infoList){qDebug()<<data.name;qDebug()<<data.age;}}}}

6、void setFormat(int start, int count, const QTextCharFormat &format)

void setFormat(int start, int count, const QColor &color)

此函数应用于语法高亮显示的当前文本块(即传递给 highlightBlock() 函数的文本)。

指定的格式 format 从 start 位置应用于文本,长度为 count 个字符(如果count为0,则不执行任何操作)。

通过此函数设置的格式不会修改文档本身。

void setFormat(int start, int count, const QFont &font)void setFormat(int start, int count, const QColor &color)

指定的字体 / 颜色从 start 位置应用于当前文本块,长度为 count 个字符。

当前文本块的其他属性(例如字体和背景色)将重置为默认值。

7、void setCurrentBlockState(int newState) / int previousBlockState()

文本块有一个数值表示其状态,默认为为-1。

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

  • setCurrentBlockState() 设置当前文本块的状态为一个数值。
  • previousBlockState() 返回语法高亮显示当前块之前的文本块的结束状态。
QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

状态主要用于处理多个文本块的使用同一个样式的情况(如多行注释)。

这种情况需要知道上一个文本块的结束状态。在 highlightBlock() 实现中,可以使用 previousBlockState() 查询上一个文本块的结束状态。解析块后,可以使用setCurrentBlockState() 保存最后一个状态。

以下代码片段来着官方示例:语法高亮器

QTextdocu<em></em>ment、QSyntaxHighlighternerror="javascript:errorimg.call(this);">

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:ntent="mp" data-source="outerlink" href="http://docs.qq.com/doc/DUlVwTW1FZlZuWE9G" rel="noopener noreferrer noopener noreferrer" target="_blank">「链接」


原原文链接:https://blog.csdn.net/kenfan1647/article/details/128578980

原文链接:https://blog.csdn.net/kenfan1647/article/details/128578980


顶一下()     踩一下()

热门推荐

发表评论
0评