我目前正在学习GTKTextTags
以及GtkTextView
和GtkTextBuffer
的应用程序。我确实注意到了this question,但并不想将数据导出到RTF文件中,我认为这是该问题的主要目的
我有一个将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
格式器而不是HTML)。我意识到现在并非如此。
问题:我将从gchar*
获得的gtk_text_buffer_get_text(...)
存储到数据库TEXT
字段中。稍后,或者当我重新打开应用程序时,我想将此数据重新加载到GtkTextBuffer
中,并通过从数据库中检索相关的TEXT
字段数据并使用gtk_text_buffer_set_text (...)
设置文本来做到这一点。在这一点上,我发现所有的格式化标签都消失了,格式化变得毫无意义。我想要做的是将文本从GtkTextBuffer
存储到数据库的TEXT
字段中,并在重新加载格式时保留格式。
问:是否可以将GtkTextBuffer
中的文本和标签存储到SQLITE3数据库中,以便在将此文本重新加载为GtkTextBuffer
格式时保留?
我曾考虑过在数据库中使用BLOB
字段而不是TEXT
字段,但不确定是否有更好的方法来实现自己的目标。
最佳答案
我建议先使用gtk_text_buffer_register_serialize_tagset()
,然后使用gtk_text_buffer_serialize()
来获取字节数组(guint8[]
),然后再使用gtk_text_buffer_deserialize()
将其读回另一个文本缓冲区。
我认为您将必须使用BLOB字段而不是TEXT,因为gtk_text_buffer_serialize()
的返回值是字节数组而不是字符串。
关于sqlite - C-带有gchar标签的GtkTextBuffer文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32006961/