gpt4 book ai didi

gtk - forward_display_line 不起作用

转载 作者:行者123 更新时间:2023-12-04 22:50:10 28 4
gpt4 key购买 nike

我正在使用 Gtk.TextView 来显示文本,如下所示:

TextView with wrapping

我的目标是以编程方式将光标移动到下一个显示行的开头(不是缓冲行的开头,而是下一个TextView中的第一个字符> 行)。

它使用 Gtk.WrapMode.WORD_CHAR 作为包装首选项。从 TextBuffer 访问时,移动 TextIter 对象工作正常:

/* This works as expected */
Gtk.TextIter start_iter;
buffer.get_start_iter (out start_iter);

或者直接使用 TextIter 时:

/* This also works as expected */
Gtk.TextIter iter;
...
iter.forward_line ();

但是当我想使用 TextView 移动 TextIter 时,例如:

Gtk.TextView text_view;
Gtk.TextIter iter;
...
text_view.forward_display_line (iter);

它不会移动迭代器,尽管 forward_display_line 返回 true(表示迭代器已移动)。

这是我正在使用的代码(在从 TextView 派生的类中):

Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);

print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0

this.forward_display_line (line_end);

print ("Offset after forwarding: %i\n", line_end.get_offset ()); // still returns 0

为什么这段代码不起作用?由 TextBuffer 初始化的 TextIter 是否不适用于 TextView 方法?

最佳答案

在您的代码中调用Gtk.TextBuffer forward_display_line() “消耗” Gtk.TextIter 但不输出与该方法执行的更改相同的“Iter”的方法。两次调用 Gtk.TextIter get_offset ()应该返回相同的值。

相反,如果您使用 Gtk.TextIter forward_line () ,那么更改应该并且将会反射(reflect)在第二个打印中,例如:

Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);

print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0

line_end.forward_line ();

print ("Offset after forwarding: %i\n", line_end.get_offset ()); // should be different from 0 if buffer has some text

关于gtk - forward_display_line 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49025061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com