C - GtkTextBuffer 文本与 gchar 的标签

C - GtkTextBuffer text with tag to gchar

我目前正在学习 GTKTextTags 以及对 GtkTextViewGtkTextBuffer 的应用。我确实注意到了 this question,但并没有打算将我的数据导出到富文本文件,据我所知这是问题的主要目的

我有一个应用程序将 GtkTextBuffer 的内容存储到 SQLITE3 数据库的 TEXT 字段中。阅读 GtkTextWidget Overview and the documentation on GtkTextTag 后,我(错误地)理解标签系统的工作方式很像标记语言,例如 XML/HTML.

当我调用 gtk_text_buffer_get_text (...) 并将 gboolean include_hidden_chars 设置为 [=21 时,我印象深刻(在设置 &start&end GtkTextIters 之后) =] 我基本上会获得一个 gchar*,它也将包含 GtkTextTags,因此字符串可能看起来像 <b>some text</b>(但显然 GtkTextTag 格式化程序不是 HTML)。我现在意识到情况并非如此。

问题:我把gtk_text_buffer_get_text(...)得到的gchar*存入数据库TEXT字段。稍后,或者当我重新打开应用程序时,我想将这些数据重新加载到 GtkTextBuffer 中,并通过从我的数据库中检索相关的 TEXT 字段数据并使用 [=31= 设置文本来实现].在这一点上,我发现所有的格式标签都消失了,格式有点变得没有实际意义了。我希望能够做的是将 GtkTextBuffer 中的文本存储到数据库的 TEXT 字段中,并在重新加载时保留格式。

问:有没有办法将 GtkTextBuffer 中的文本和标签存储到 SQLITE3 数据库中,以便在将此文本重新加载到 GtkTextBuffer 格式时保留?

我考虑过在数据库中使用 BLOB 字段而不是 TEXT 字段,但不确定是否有更好的方法来实现我所追求的目标。

我建议使用 gtk_text_buffer_register_serialize_tagset() and then gtk_text_buffer_serialize() 获取一个字节数组 (guint8[]),稍后您可以使用 gtk_text_buffer_deserialize().

读回另一个文本缓冲区

我认为您必须使用 BLOB 字段而不是 TEXT,因为 gtk_text_buffer_serialize() 的 return 值是字节数组而不是字符串。