C++ C++;GTKmm-将文本插入到具有多个缓冲区和更改文本的文本视图中

C++ C++;GTKmm-将文本插入到具有多个缓冲区和更改文本的文本视图中,c++,gtk,gtk3,gtkmm,gtkmm3,C++,Gtk,Gtk3,Gtkmm,Gtkmm3,我正在尝试使用以下方法将多行数据插入我的TextView(大约5-10行): Glib::RefPtr<Gtk::TextBuffer> buffer = txtView.get_buffer(); buffer->set_text(""); Gtk::TextBuffer::iterator iter; iter = buffer->get_iter_at_offset(0); iter = buffer->insert(iter, myString);

我正在尝试使用以下方法将多行数据插入我的TextView(大约5-10行):

Glib::RefPtr<Gtk::TextBuffer> buffer = txtView.get_buffer();
buffer->set_text("");    

Gtk::TextBuffer::iterator iter;
iter = buffer->get_iter_at_offset(0);
iter = buffer->insert(iter, myString);

正如andlabs所说,您需要使用Gtk::TextBuffer::Tag。请查找一些代码片段作为开始。这里的参考是

创建必要的标记表和标记,为标记指定属性,并将标记添加到标记表中

m_reftagtable = Gtk::TextBuffer::TagTable::create();
reftagmatch = Gtk::TextBuffer::Tag::create();
reftagmatch->property_background() = "orange";
m_reftagtable->add(reftagmatch);
使用TagTable创建Textbuffer

m_textbuffer = Gtk::TextBuffer::create(m_reftagtable);
m_textview->set_buffer(m_textbuffer);
假设您有一些条件,根据明文条件的布尔状态,您可以添加明文或橙色背景的文本

iterend = m_textbuffer->get_iter_at_offset(m_textbuffer->get_char_count());
if (plaintextcondition){
    m_textbuffer->insert(iterend, "Plain text");
} else {
    m_textbuffer->insert_with_tag(iterend, "Orange Text", refTagMatch);
}

当然,这只是一个暗示。有关更多信息,请参阅参考资料。

您需要使用GtkTextTags,在要设置样式的字符范围内选择性地应用它们。
iterend = m_textbuffer->get_iter_at_offset(m_textbuffer->get_char_count());
if (plaintextcondition){
    m_textbuffer->insert(iterend, "Plain text");
} else {
    m_textbuffer->insert_with_tag(iterend, "Orange Text", refTagMatch);
}