Я изучаю 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("")
Спасибо, это сработало. Для пояснения 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
Извините за путаницу, я не обращал внимания на какой объект был TextView. Я редактировал свой ответ, чтобы использовать TextView. Я не уверен, почему он не печатает, пока программа не закроется (вам может потребоваться обработать событие или сигнал, например on_click, и поместить печать в обработчик сигнала). – mikero
Примечание: std :: endl очищает выходной поток (в дополнение к вставке новой строки), возможно, именно поэтому вы видите немедленный дисплей консоли при его использовании. Что касается «\ n», я не уверен, почему это отображается немедленно, если только реализация библиотеки не относится к нему как std :: endl. – mikero