C - 标记为gchar的GtkTextBuffer文本

时间:2015-08-14 09:39:10

标签: sqlite gtk3

我目前正在了解GTKTextTags以及GtkTextViewGtkTextBuffer的申请。我注意到this question但是我没有想要将我的数据导出到富文本文件中,我认为这是该问题的主要目的

我有一个应用程序,它将GtkTextBuffer的内容存储到TEXT数据库的SQLITE3字段中。阅读了GtkTextWidget概述和GtkTextTag上的文档后,我(错误地)理解标记系统的工作方式与XML / HTML等标记语言非常相似。

我在&start&end GtkTextIters设置gtk_text_buffer_get_text (...)之后,gboolean include_hidden_chars设置为TRUE gchar*我基本上会获得GtkTextTags,其中还包含<b>some text</b>,因此字符串可能看起来像GtkTextTag(但很明显,gchar*格式化程序不是HTML)。我现在意识到情况并非如此。

问题:我将从gtk_text_buffer_get_text(...)获取的TEXT存储到数据库GtkTextBuffer字段中。稍后或当我重新打开应用程序时,我想将此数据重新加载到TEXT,并通过从我的数据库中检索相关的gtk_text_buffer_set_text (...)字段数据并使用{{1}设置文本来执行此操作}。在这一点上,我发现所有的格式化标签都消失了,格式化有点变得没有实际意义。我希望能够将GtkTextBuffer中的文本存储到数据库的TEXT字段中,并在重新加载时保留格式。

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

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

1 个答案:

答案 0 :(得分:1)

我建议使用gtk_text_buffer_register_serialize_tagset()然后gtk_text_buffer_serialize()来获取一个字节数组($('#sales-opp-key-contacts-table-div').html("<%= escape_javascript(render :partial => 'sale_contacts/table')%>"); ),然后您可以使用guint8[]将其读回另一个文本缓冲区。< / p>

我认为你必须使用BLOB字段而不是TEXT,因为gtk_text_buffer_deserialize()的返回值是字节数组而不是字符串。