Вот фрагмент кода, который делает то, что вы хотите:
- Когда окно создается изначально, кнопка выключена.
- При нажатии кнопки кнопка меняет состояние на «Вкл.».
Обратите внимание, что это минимальный пример, поэтому повторное нажатие на кнопку не изменит ее состояние обратно на «Вкл.», но я оставлю эту часть вам , если вам это необходимо.
#include <gtkmm.h>
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "buttons.on.off");
// Load images:
Gtk::Image button1_on_image{"button1_on.png"};
Gtk::Image button1_off_image{"button1_off.png"};
// Create button:
Gtk::ToolButton button1{button1_off_image};
button1.set_tooltip_markup("Select one stick");
// Create handler (as a lambda):
const auto handler = [&button1, &button1_on_image, &button1_off_image]()
{
// We change to "on" here (when clicked):
button1.set_icon_widget(button1_on_image);
// We make it visible:
button1.show_all();
};
button1.signal_clicked().connect(handler);
// Add the button to the window.
Gtk::Window window;
window.add(button1);
// Make the window visible:
window.show_all();
return app->run(window);
}
Я сделал некоторые упрощения в вашем фрагменте:
- Элемент списка
- Я положил все в стек ( no
new
). - Обработчик - лямбда.
На мой взгляд, это делает синтаксис более понятным.