0

我有一个文本编辑器(QTextEdit)。我的编辑器中的某些单词包含附加信息(即,该单词在波形文件中的两个对应整数位置)。它们作为 QTextCharFormat 对象的自定义属性存储在 Python 对象中(我使用如下代码附加它们self.editor.textCursor().setCharFormat(QTextCharFormat().setProperty(MyPropertyID, myWordAttachment):)

不幸的是,如果我将文档保存为 html,那么所有这些额外的格式都会丢失。

所以,我想执行最简单的任务:用所有格式保存我的文档,包括 myWordAttachment(并从磁盘加载它)。

Qt5没有准备好东西,我必须自己编写所有文档的序列化代码,我是对的吗?(我仍然希望完成这项工作的简单功能在哪里)

4

1 回答 1

0

1.你循环你的文字每个字符。

2.你抓住了这个角色和它的 charFormat()

3.你得到属性。

4.因为属性最终是某物的值,int, str,... 所以你通过charFormat().property(1),(2),(3)... 或properties()

5.最重要的是角色的位置和范围。您在第1个循环中获得位置。

6.当您捕获 CharFormats 时,您将插入一些可散列的对象,例如列表。& 并且您不要忘记插入 CharFormats 位置。

6.你保存你的文件和位置和属性。

我对您的解决方案的建议。

1.你可以得到characterCount()对象QTextDocument

2.你循环的范围characterCount()

3.在做之前,你先做一个QTextCursor对象。

4.你将textcursor设置在第一个位置。(movePosition方法& Startmoveoperation&KeepAnchor标志)

5.您将光标向右移动一个字符和另一个。

6.你检查字符的 charFormat()tc.charFormat()tc.position()

7.但现在是三思而后行的时候了。CharFormat 总是一堆字符。您可能会得到一些相同 CharFormat() 的字符。您可以为此做好准备。我可以考虑一些方法,但是...您应该设置 QCharFormat objectType 或 propertyId() 以预先指定QCharFormatin Advance(在编辑文档期间)。为什么不将文本设置到属性中保存和加载后。我希望你在调试和调试期间设法通过这里。

8.如果你得到一个charFormat,你检查objectType()。

9.如果objectType() 和Before searched 一样,你就通过了搜索引擎,什么都不做。

10.第二个重要的事情是调用clearSelection()每次搜索。

11.您将 document() 保存为 html 字符串。然后保存 charFormats() 属性。

12.当你加载你的document()时,html语句又回来了。并加载属性。

  1. 您制作 QTextCursor 和 setPosition(预先保存的属性位置。)

  2. 您将 QTextCursor 移动到该位置,然后选择目标文本。

  3. 您再次采用 charFormat 属性并结束。

总结 如何指定 charFormat() 很重要。您可以毫无问题地捕获charFormat。但是charFormat()在某些范围内采用。因此您必须区分范围。

1.目标文本在QTextCharFormat的属性中设置。2.您在同一个 QTextCharFormat 的对象期间有 QTextCursor 传递。

我能想到他们...

我认为这对你有一些帮助。

于 2018-11-05T06:39:25.603 回答