使用 Gtkmm 以编程方式 select Gtk::TextView 中的文本

Programmatically select text in Gtk::TextView using Gtkmm

我如何 select 在 Gtk::TextView 中发短信:

developer.gnome.org 的文档似乎没有帮助。

选择不是在 Gtk::TextView 本身中完成的,而是在关联的 Gtk::TextBuffer 中完成的。虽然我不确定为什么要做出这种设计选择,但我至少清楚结果:当多个 Gtk::TextView 共享同一缓冲区时,它们可能会共享选择。这可能是可取的,也可能不是,但“他们”就是这样做的。

一个Gtk::TextView的buffer可以用

得到

Glib::RefPtr< TextBuffer > get_buffer ()

Returns the Gtk::TextBuffer being displayed by this text view.

The reference count on the buffer is not incremented; the caller of this function won’t own a new reference.

然后,Gtk::TextBuffer提供

void Gtk::TextBuffer::select_range (const iterator& ins, const iterator& bound)

This function moves the “insert” and “selection_bound” marks simultaneously.

If you move them in two steps with move_mark(), you will temporarily select a region in between their old and new locations, which can be pretty inefficient since the temporarily-selected region will force stuff to be recalculated. This function moves them as a unit, which can be optimized.

ins Where to put the “insert” mark.

bound Where to put the “selection_bound” mark.

当前光标位置可以用

获取

Glib::RefPtr Gtk::TextBuffer::get_insert()

Returns the mark that represents the cursor (insertion point).

Equivalent to calling get_mark() to get the mark named “insert”, but very slightly more efficient, and involves less typing.

返回的 Gtk::TextMark 可以通过使用

“转换”为 Gtk::TextIter

TextIter Gtk::TextMark::get_iter().

此外,Gtk::TextBuffer 提供了多种 get_iter_at 函数来获取不同参数的 Gtk::TextBuffer::iterator


一般注意事项:

通过参考手册学习一个功能强大的小部件API,我认为是一件乏味的事情。

在 gtkmm 的情况下,有一个严肃的选择:

Programming with gtkmm 3

(也有其他语言版本)。

第 11 章是关于 TextView 的,可能有助于了解“大局”。