fix: v0.10.6 —— 修复代码框/表格之后内容被吞进去导致导出卡死
根因 - 插入 QTextFrame(代码块)或 QTextTable(表格)之后,光标被设到 frame->lastPosition()——这个位置仍然在框内部,于是后续所有内容 都被插进了这个框/单元格里,一层层嵌套 - 复杂文档(有多张表、多个代码块)嵌套后文档高度从 1.3 万爆到 12 万, 分页时几乎算不完,表现就是点导出直接卡住 修复 - 定位到 lastPosition() + 1(框外的位置)再继续写 - 实测同一份 11KB 报告:修复前文档高度 120137、导出超时; 修复后 13664、14 页 A4,1 秒内完成 顺带 - 之前版本里代码块/表格后面的内容排版其实也是错的(被塞进框里), 这次一并修正 - 版本 0.10.6
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
TEMPLATE = app
|
||||
TARGET = VoiletMark
|
||||
VERSION = 0.10.5
|
||||
VERSION = 0.10.6
|
||||
|
||||
QT += core gui widgets
|
||||
|
||||
|
||||
@@ -276,9 +276,10 @@ void Renderer::renderCodeBlock(const QStringList &lines, const QString &info)
|
||||
frameCursor.insertText(QStringLiteral(" "), format);
|
||||
}
|
||||
|
||||
// 光标挪到边框外面,后面的内容接着写
|
||||
// 光标挪到边框外面:lastPosition() 还在框内,+1 才是框后面的位置,
|
||||
// 否则后续内容会一层层嵌进这个框里,排版高度爆掉、导出时卡死。
|
||||
m_cursor = QTextCursor(m_document);
|
||||
m_cursor.setPosition(frame->lastPosition());
|
||||
m_cursor.setPosition(qMin(frame->lastPosition() + 1, m_document->characterCount() - 1));
|
||||
}
|
||||
|
||||
QColor Renderer::tokenColor(CodeHighlight::Token token) const
|
||||
@@ -373,8 +374,9 @@ void Renderer::renderTable(const QStringList &rows, const QString &separator)
|
||||
}
|
||||
}
|
||||
|
||||
// 同样要跨过表格边界,否则后面的内容会塞进最后一个单元格
|
||||
m_cursor = QTextCursor(m_document);
|
||||
m_cursor.setPosition(table->lastPosition());
|
||||
m_cursor.setPosition(qMin(table->lastPosition() + 1, m_document->characterCount() - 1));
|
||||
}
|
||||
|
||||
void Renderer::renderRule()
|
||||
|
||||
Reference in New Issue
Block a user