【问题标题】:Qt: how to save QTextEdit contents with custom propertiesQt:如何使用自定义属性保存 QTextEdit 内容
【发布时间】:2023-04-05 22:25:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我知道你必须手动保存这些属性。

标签: qt pyqt qt5 qtextedit qtextdocument


【解决方案1】:

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

2.然后你抓住了这个字符和它的 charFormat()

3.你得到属性。

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

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

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

6.您保存您的文档以及位置和属性。

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

1.你可以通过QTextDocument对象获取characterCount()

2.你循环characterCount()的范围

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

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

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

6.你通过tc.charFormat()tc.position()检查角色的charFormat()

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

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 pass。

我能想到他们……

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

【讨论】:

  • 好的,谢谢!我最终得到了像你这样的解决方案(但我的不那么普遍)。可惜开发者没有想到这个简单的任务,所以我们不得不在这里发明轮子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多