GTK + / GTKMM Сигнал «изменен» в текстовом буфере не получает данные - PullRequest
0 голосов
/ 05 февраля 2019


Мне нужна ваша помощь по GTK +.
В том же окне у меня есть 20 текстовых просмотров, и мне нужно обработать только 1 обратный вызов "измененного" сигнала, поступающего из текстовых буферов под ними.
Чтоэто лучший способ реализовать это, я имею в виду, как получить виджет textview, связанный с изменением текста?
Со своей стороны я попытался передать сам объект виджета textview, на соединении для сигнала «изменен», но этоне работает.
Со своей стороны я также попробовал такую ​​же реализацию для кнопок, и она отлично работает для сигнала "нажал", и переданный объект виджета кнопки работает нормально.
Почему это не работает для Textviewс базовыми текстовыми буферами?

Код для подключения:
g_signal_connect (G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (WidgetSecret)))), «изменен», G_CALLBACK (on_SecretText_oted), Woidget0 * * 0
0t0 *00 * * 0on_SecretText_changed (GtkWidget * p)

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 февраля 2019


Привет всем,

Я нашел другой способ работы с ним, во-первых, это соответствовать только Gtkmm, а не смешивать Gtk и Gtkmm.

Gtk::TextView*       pSecret[21];

Сначала получите все объекты с поляны:

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
}

и это работает!

...