Один обработчик для 9 кнопок (gtkmm-2, libsigc ++) - PullRequest
1 голос
/ 28 марта 2012

Я пытаюсь создать виджет с 9-ю тумблерами (3 строки и 3 столбца), пользователь сможет выбрать один из них. Итак, я написал 9 обработчиков событий , которые отключили текущую выбранную кнопку и сохранили выбор.

Я просто хотел узнать, есть ли способ подключить эти 9 переключающих кнопок к одному отдельному обработчику, и если есть способ , узнать, какая кнопка издала сигнал . Нечто похожее на QT

QObject::sender()

Это позволило бы избежать многократного повторения в моем коде. Как отмечено в названии, я использую gtkmm версии 2 и, конечно, sigc ++.

Спасибо за совет

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Я использовал лямбды c ++ 11 для решения аналогичной проблемы.В основном вы фиксируете информацию о цели в лямбде, поэтому при срабатывании сигнала вы можете сделать что-то конкретное для цели.Например:

abutton.signal_clicked().connect([this,&abutton]{ handle_click(abutton); });

Я считаю, что это будет работать с gtkmm 2.x, но я использовал его только с 3.0, и я не знаю, как sigc ++ изменился между двумя версиями.Если вы не можете использовать функции c ++ 11, возможно, вы сможете сделать что-то похожее с лямбда-функциональностью, которая поставляется с sigc ++, но у меня нет опыта работы с ней.

2 голосов
/ 28 марта 2012

Я не очень знаком с gtkmm, но в простом C GTK обработчик сигнала выглядит так:

void on_button_toggled (GtkToggleButton *button, gpointer user_data);

Указатель button является «отправителем» в терминологии QT. Чтобы узнать, какая кнопка является какой, вы можете назвать их или прикрепить данные с помощью g_object_set_data().

...