C++ GTKmm - 如何获取我的 TextView (TextBuffer) 的内容
Posted
技术标签:
【中文标题】C++ GTKmm - 如何获取我的 TextView (TextBuffer) 的内容【英文标题】:C++ GTKmm - How do I get the content of my TextView (TextBuffer) 【发布时间】:2016-05-07 08:59:59 【问题描述】:我正在 Linux 上学习 GTKmm (C++)。
我想通过按下按钮来获取 TextView 的内容。
代码std::cout << m_textBuffer->get_text();
没有向控制台输出任何东西,我在官网上也找不到足够的解释。
似乎我需要使用迭代器,但尝试在函数get_text()
中使用m_textBuffer->start()
会告诉我start() 不是TextBuffer 的函数,也不是等效的end()。
控制台输出一些可能相关的警告:
Gtk-CRITICAL **: gtk_text_buffer_get_iter_at_mark: 断言 'GTK_IS_TEXT_MARK (mark)' 失败 Gtk-CRITICAL **: gtk_text_layout_get_line_yrange: 断言 '_gtk_text_iter_get_btree (iter) == _gtk_text_buffer_get_btree (layout->buffer)' 失败
在 GUI 构造函数中,我有这个:
m_txtQuestion.set_buffer(m_textBuffer);
m_textBuffer = Gtk::TextBuffer::create();
m_textBuffer->set_text("")
【问题讨论】:
【参考方案1】:(对于 gtkmm-2.4 和 gtkmm-3.0): 不要尝试设置缓冲区,只需使用 TextView 中的缓冲区:
m_txtQuestion.get_buffer()->set_text("My text.");
然后获取文本使用:
m_txtQuestion.get_buffer()->get_text();
【讨论】:
谢谢,这行得通。为了澄清,m_txtQuestion 是 TextView,m_textBuffer 是 TextBuffer。所以,我不需要创建一个 TextBuffer,因为 TextView 已经提供了一个(应该更仔细地阅读文档)。我现在可以将它输出回控制台,但是它只会在程序关闭时显示文本(带有std::cout << m_textBuffer->get_text()
),但是如果我执行 std::cout << m_textBuffer->get_text() << "\n"
(或者如果我将 \n 替换为 std::endl )。如果你能告诉我为什么那会很棒,但到目前为止这只是好奇。再次感谢。
对不起,我没有注意哪个对象是 TextView。我编辑了我的答案以使用 TextView。我不确定为什么在程序关闭之前它不打印(您可能需要处理一个事件或信号,如 on_click,并将打印放在信号处理程序中)。
注意:std::endl 刷新输出流(除了插入换行符),这可能是您在使用它时看到立即控制台显示的原因。至于“\n”,我不确定为什么会立即显示,除非库实现将其视为 std::endl。以上是关于C++ GTKmm - 如何获取我的 TextView (TextBuffer) 的内容的主要内容,如果未能解决你的问题,请参考以下文章
C++ vector 和 Gtkmm 能完美地协同工作吗?从 gtkmm on_click 方法获取向量<string> 的值时出现分段错误
使用 Glade 和 gtkmm 对 GTK+ 对象进行内存管理