Gtk объект, имя, тип и т. Д. - PullRequest
       18

Gtk объект, имя, тип и т. Д.

0 голосов
/ 13 октября 2011

Я создал окно и vbox с 3 кнопками в Glade.Все кнопки подключили событие «Нажал» к одному и тому же обработчику.Обработчик выглядит так:

CLICKED_btn(GtkObject *object, gpointer user_data)
{
    g_print("CLICKED\n");
}

CLICKED появляется на терминале для любого нажатия на любую кнопку.Есть ли способ, через объект или другой, узнать, какая кнопка вызывает событие Clicked в случае, когда все кнопки используют один и тот же обработчик?

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Параметр object относится к объекту, который генерирует событие, в вашем случае к кнопке. Затем вы можете использовать gtk_widget_get_name() или любую другую функцию GtkObject / GtkWidget / GtkButton, чтобы изменить ситуацию.

UPDATE : Как представляется, в более новых версиях GTK / Glade имя виджетов не устанавливается равным id, поэтому оно остается по умолчанию, то есть именем типа. Чтобы получить id объекта, вы можете использовать функцию gtk_buildable_get_name(), которая работает с любым строимым объектом.

При этом вы получите button1, button2 или любое другое имя, которое вы указали для этих кнопок.

Пожалуйста, не используйте метку, чтобы сделать разницу между кнопками. Да, это работает, но это плохая привычка: трудно поддерживать, плохо с интернационализацией и побеждает основную цель Glade: разделять интерфейс и код.

0 голосов
/ 13 октября 2011

Сначала используйте документацию, чтобы получить правильный прототип для "нажатого" сигнала GtkButton.

Затем вы знаете, что прототип вашего обратного вызова должен выглядеть следующим образом:

void on_button_cliked (GtkButton *button, gpointer user_data)

Параметр button - это объект, который получил сигнал, т.е.кнопка, на которую вы нажали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...