Единый обработчик для 9 кнопок (gtkmm-2, libsigC++)
Я пытаюсь сделать виджет с 9-ю тумблерами (3 строки и 3 столбца), пользователь сможет выбрать одну из них. Итак, я написал 9 обработчиков событий, которые отключили текущую выбранную кнопку и сохранили выбор.
Я просто хотел узнать, есть ли способ соединить эти 9 кнопок-переключателей с одним обработчиком, и есть ли способ узнать, какая кнопка излучает сигнал. Нечто похожее на QT
QObject::sender()
Это позволит избежать много повторений в моем коде. Как отмечено в названии, я использую gtkmm версии 2 и, конечно, sigC++.
Спасибо за совет
2 ответа
Я использовал лямбды с ++11 для решения аналогичной проблемы. В основном вы фиксируете информацию о цели в лямбде, поэтому при срабатывании сигнала вы можете сделать что-то конкретное для цели. Например:
abutton.signal_clicked().connect([this,&abutton]{ handle_click(abutton); });
Я полагаю, что это будет работать с gtkmm 2.x, но я использовал его только с 3.0, и я не знаю, как sigC++ изменился между двумя версиями. Если вы не можете использовать функции C++11, вы можете сделать что-то похожее с лямбда-функциями, которые поставляются с sigC++, но у меня нет опыта работы с ними.
Я не очень знаком с gtkmm, но в простом C GTK обработчик сигнала выглядит так:
void on_button_toggled (GtkToggleButton *button, gpointer user_data);
button
указатель является "отправителем" в терминологии QT. Чтобы узнать, какая кнопка является какой, вы можете назвать их или прикрепить данные с g_object_set_data()
,