我有一个文本编辑器(QTextEdit)。我的编辑器中的某些单词包含附加的其他信息(即该单词的 wave 文件中的两个相应的整数位置)。 它们作为 QTextCharFormat 对象的自定义属性存储在 Python 对象中(我用这样的代码附加它们:self.editor.textCursor().setCharFormat(QTextCharFormat().setProperty(MyPropertyID, myWordAttachment)
)不幸的是,如果我将文档保存为 html,则所有这些额外的格式都会丢失。
所以,我想执行最简单的任务:保存我的文档及其所有格式,包括myWordAttachment(并从磁盘加载它)。
我是否正确,Qt5 没有准备好一些东西,我必须自己编写该文档的所有序列化代码?(我仍然希望完成这项工作的简单功能在哪里)
1.你遍历文本的每个字符。
2.你抓住了字符及其字符格式()
3.你得到属性。
4.因为属性最终是某物的值,int
,str
,... 因此,您可以通过charFormat().property(1),(2),(3)
获得属性...或properties()
5.最重要的是角色的位置和范围。您在第 1 个循环中获得该位置。
6.当您捕获字符格式时,您将插入到可哈希对象中,例如列表。 并且您不要忘记插入CharFormats位置。
6.您保存文档以及位置和属性。
我对你的解决方案的建议。
1.您可以通过QTextDocument
对象获得characterCount()
。
2.你循环characterCount()
的范围
3.在执行此操作之前,您先制作一个QTextCursor
对象。
4.将文本光标设置在第一个位置。(movePosition 方法 &Start
moveoperation & KeepAnchor flag)
5.您将光标移动到右边一个字符和另一个字符。
6.你通过tc.charFormat()
和tc.position()
检查字符的字符格式()
7.但现在是三思而后行的时候了。字符格式始终是一堆字符。 你可能会得到一些相同的字符格式()。 你可以为此做好准备。我可以想一些方法,但是...您应该设置 QCharFormat 对象类型或属性 Id() 以提前指定QCharFormat
(在编辑文档期间)。为什么不在保存和加载后将文本设置为属性。我希望您在调试和测试期间设法通过这里。
8.如果你得到一个字符格式,你检查对象类型()。
9.如果 objectType() 与搜索之前相同,则无需执行任何操作即可通过搜索引擎。
10.第二个重要的事情是每次搜索clearSelection()
调用。
11.将文档()保存为 html 字符串。并保存 charFormat() 属性。
12.当您加载文档(),HTML 句子返回。 并加载属性。
-
你制作QTextCursor和setPosition(属性的位置预先保存。
-
您将 QTextCursor 移动到该位置并选择目标文本。
-
您再次采用 charFormat 属性并结束。
总结 如何指定 charFormat() 很重要。 你可以毫无问题地捕获charFormat,但charFormat()在某些范围内被采用。所以你必须区分范围。
1.目标文本在QTextCharFormat的属性中设置。 2.在同一 QTextCharFormat 的对象期间,您有 QTextCursor 传递。
我能想到他们...
我认为这对你有一些帮助。