とりあえずgtkmmは触った事がないので、GTK+で話をします。
(gtkmmはC++ラッパなんで、おおよそ理解していただけると思いますが)
「move-cursor」はシグナルではないですか?
別にシグナルをemitしてもできるかもしれませんが、GtkTextViewに割り当てられているGtkTextBufferに対して、gtk_text_buffer_get_iter_at_offsetなどの関数でiteratorを取得し、gtk_text_buffer_place_cursor関数でカーソルを移動するのがまっとうなやり方だと思います。
c
1#include <gtk/gtk.h>
2
3void on_clicked(GtkButton *button, gpointer user_data)
4{
5 GtkTextBuffer *text_buffer = GTK_TEXT_BUFFER(user_data);
6 GtkTextIter iter;
7
8 /* 真ん中辺りにカーソル移動 */
9 gtk_text_buffer_get_iter_at_offset(text_buffer, &iter, gtk_text_buffer_get_char_count(text_buffer) / 2);
10 gtk_text_buffer_place_cursor(text_buffer, &iter);
11}
12
13int main(int argc, char *argv[])
14{
15 GtkWidget *window;
16 GtkWidget *text_view;
17 GtkWidget *button;
18 GtkWidget *box;
19 GtkTextBuffer *text_buffer;
20
21 gtk_init(&argc, &argv);
22
23 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
24 gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
25
26 box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
27 gtk_widget_show(box);
28 gtk_container_add(GTK_CONTAINER(window), box);
29
30 text_buffer = gtk_text_buffer_new(NULL);
31 text_view = gtk_text_view_new_with_buffer(text_buffer);
32 gtk_widget_show(text_view);
33 gtk_box_pack_start(GTK_BOX(box), text_view, TRUE, TRUE, 0);
34
35 button = gtk_button_new_with_label("Center");
36 gtk_widget_show(button);
37 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
38 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(on_clicked), text_buffer);
39
40 g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
41 gtk_widget_show(window);
42
43 gtk_main();
44 return 0;
45}
46
47
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/20 02:21