Единый обработчик для 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(),

Другие вопросы по тегам