2016-05-07 5 views
0

Я изучаю GTKmm (C++) в Linux.C++ GTKmm - Как получить содержимое моего TextView (TextBuffer)

Я хочу получить содержимое TextView с помощью нажатия кнопки.

Код std::cout << m_textBuffer->get_text(); ничего не выводит на консоль, и я не могу найти достаточное объяснение на официальном сайте.

Кажется, что мне нужно использовать итератор, но при попытке сделать это с помощью m_textBuffer->start() в функции get_text() сказано, что start() не является функцией TextBuffer, а также эквивалентом end().

Консоль вывода несколько предупреждение, которое может быть связано:

Gtk-ВАЖНЫЙ **: gtk_text_buffer_get_iter_at_mark: утверждение 'GTK_IS_TEXT_MARK (знак)' несостоявшееся Gtk-ВАЖНЫЙ **: gtk_text_layout_get_line_yrange: утверждение «_gtk_text_iter_get_btree (иТЭР) == _gtk_text_buffer_get_btree (layout-> буфер)»не удалось

В конструкторе 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(); 
+0

Спасибо, это сработало. Для пояснения m_txtQuestion был TextView, m_textBuffer был TextBuffer. Таким образом, мне не нужно создавать TextBuffer по мере того, как TextView уже предоставляет один (должен был внимательно прочитать документ). Теперь я могу вывести его обратно на консоль, но он будет отображать только текст (whith 'std :: cout << m_textBuffer-> get_text()'), когда программа закрывается, НО она отображается немедленно, если я делаю 'std :: cout << m_textBuffer-> get_text() << "\ n" '(или если я заменил \ n на std :: endl). Если вы можете сказать мне, почему это было бы здорово, но пока это просто любопытство. Еще раз спасибо. – user96649

+0

Извините за путаницу, я не обращал внимания на какой объект был TextView. Я редактировал свой ответ, чтобы использовать TextView. Я не уверен, почему он не печатает, пока программа не закроется (вам может потребоваться обработать событие или сигнал, например on_click, и поместить печать в обработчик сигнала). – mikero

+0

Примечание: std :: endl очищает выходной поток (в дополнение к вставке новой строки), возможно, именно поэтому вы видите немедленный дисплей консоли при его использовании. Что касается «\ n», я не уверен, почему это отображается немедленно, если только реализация библиотеки не относится к нему как std :: endl. – mikero

 Смежные вопросы

  • Нет связанных вопросов^_^