GTK + / GTKMM在文本缓冲区上“已更改”的信号未接收到数据

时间:2019-02-05 15:09:15

标签: gtk gtkmm


我需要您在GTK +上的帮助。
在同一窗口上,我有20个文本视图,并且我只需要处理1个回调,即来自它们下面的文本缓冲区的“已更改”信号。
最好的实现方法是什么,我的意思是如何检索与文本更改有关的textview小部件?
在我这边,我尝试传递textview小部件对象本身,在连接上传递“已更改”信号,但它不起作用。
在我这一边,我还尝试了按钮的相同实现,并且它对信号“单击”非常有效,并且传递的按钮小部件对象工作正常。
为什么它不适用于带有底层文本缓冲区的Textview?

用于连接的代码:
g_signal_connect(G_OBJECT(gtk_text_view_get_buffer(GTK_TEXT_VIEW(WidgetSecret))),“已更改”,G_CALLBACK(on_SecretText_changed),WidgetSecret);
和回调:
void on_SecretText_changed(GtkWidget * p)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)


大家好,

我发现了另一种处理方法,首先是仅遵循Gtkmm,而不是混淆Gtk和Gtkmm。

Gtk::TextView*       pSecret[21];

首先从Glade检索所有对象:

for (int i=1; i<=20; i++) {
    sprintf(Bidon, "tvCh%0d", i);
    pBuilder->get_widget(Bidon, pSecret[i]);
}

,然后使用绑定来传输整数:

int id = 1; // this is the Id to pass to callback for this TextView

pSecret[id]->get_buffer()->signal_changed().connect(sigc::bind<int>(sigc::ptr_fun(&on_SecretText_changed), id));

根据这种回调:

void on_SecretText_changed(int id)
{
    // id is retrieved and used here
}

那行得通!