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的目标位于同一目录中,即着路径中最后一个“/”之后的任何部分都将被忽略。
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。
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 中的值。
将图像添加为资源,从文档中引用它:
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开始算。
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()
返回此文档中的页数。
22、void print(QPagedPaintDevice *printer)
打印文档。
23、int revision()
返回文档的修订版本值。当编辑文档时,修订版本的值会增加。
24、QTextframe * rootframe()
返回文档的根框架。
25、void setbaselineOffset(qreal baseline)
设置在文档布局中使用的字体高度的百分比的基线。默认值为0。正值将文本上移相应的百分比,负值则向下移动。
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)。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
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());编辑框中匹配正则表达式的内容被设置为指定的格式。
二、成员函数
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。
- setCurrentBlockState() 设置当前文本块的状态为一个数值。
- previousBlockState() 返回语法高亮显示当前块之前的文本块的结束状态。
状态主要用于处理多个文本块的使用同一个样式的情况(如多行注释)。
这种情况需要知道上一个文本块的结束状态。在 highlightBlock() 实现中,可以使用 previousBlockState() 查询上一个文本块的结束状态。解析块后,可以使用setCurrentBlockState() 保存最后一个状态。
以下代码片段来着官方示例:语法高亮器
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
原原文链接:https://blog.csdn.net/kenfan1647/article/details/128578980
原文链接:https://blog.csdn.net/kenfan1647/article/details/128578980
