Выбор выполняется не в самом Gtk::TextView
, а в соответствующем Gtk::TextBuffer
. Хотя я не уверен, почему именно этот выбор дизайна был сделан, я, по крайней мере, ясно понимаю последствия: выборки могут совместно использоваться несколькими Gtk::TextView
s, когда они совместно используют один и тот же буфер. Это может быть желательно или нет, но именно так «они» сделали это.
Буфер Gtk::TextView
можно получить с помощью
Glib :: RefPtr < TextBuffer> get_buffer ()
Возвращает Gtk :: TextBuffer, отображаемый этим текстовым представлением.
Счетчик ссылок в буфере не увеличивается; вызывающий эту функцию не будет владельцем новой ссылки.
Затем Gtk::TextBuffer
обеспечивает
void Gtk :: TextBuffer :: select_range ( const iterator & ins, const iterator & bound)
Эта функция перемещает метки «insert» и «selection_bound» одновременно.
Если переместить их в два этапа с помощью move_mark()
вы временно выберете регион между их старым и новым местоположением, что может быть довольно неэффективным, поскольку временно выбранный регион заставит вещи пересчитываться. Эта функция перемещает их как единое целое, которое можно оптимизировать.
ins
Где поставить метку «вставки».
bound
Где поставить метку «selection_bound».
Текущую позицию курсора можно получить с помощью
Glib :: RefPtr Gtk :: TextBuffer :: get_insert ()
Возвращает метку, которая представляет курсор (точку вставки).
Эквивалентно вызову get_mark (), чтобы получить метку с именем «insert», но она немного более эффективна и требует меньше ввода.
Возвращенное Gtk::TextMark
можно «преобразовать» в Gtk::TextIter
с помощью
TextIter Gtk :: TextMark :: get_iter () .
Кроме того, Gtk::TextBuffer
предоставляет множество функций get_iter_at
для получения Gtk::TextBuffer::iterator
s для различных параметров.
Примечание в Общее:
Изучение справочного руководства по мощному API виджетов - это то, что я считаю утомительным.
В Кроме gtkmm, есть серьезная альтернатива:
Программирование с помощью gtkmm 3
(также доступно на других языках).
Глава 11 о TextView и может помочь получить «большую картину».