使用 Gtkmm 以编程方式 select Gtk::TextView 中的文本
Programmatically select text in Gtk::TextView using Gtkmm
我如何 select 在 Gtk::TextView
中发短信:
- 从光标所在处开始
n
向后的字符数
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 的情况下,有一个严肃的选择:
(也有其他语言版本)。
第 11 章是关于 TextView 的,可能有助于了解“大局”。
我如何 select 在 Gtk::TextView
中发短信:
- 从光标所在处开始
n
向后的字符数
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 的情况下,有一个严肃的选择:
(也有其他语言版本)。
第 11 章是关于 TextView 的,可能有助于了解“大局”。