Gtk + Glade: виджеты, использующие тот же обработчик сигнала. Как отличить их друг от друга? - PullRequest
3 голосов
/ 06 июня 2011

Теперь у меня есть окно, включающее множество кнопок, которые выполняют похожее поведение, поэтому для них естественно использовать один и тот же обработчик сигналов.Но, однако, после того, как сигнал произошел, я просто не могу отличить их друг от друга.Да, у меня есть указатель на объект, но я не могу сказать, является ли это первая кнопка, вторая кнопка или что-то еще.

Я предположил атрибут «Имя» (я установил его на «togglebutton1»') на поляне можно получить с помощью функции gtk_widget_get_name, но я ошибаюсь, вместо этого я получил' GtkToggleButton '.XML-файл говорит: <object class="GtkToggleButton" id="togglebutton1">.

Так есть ли в любом случае возможность использовать свойство 'id', или есть ли лучшее решение для определения этих кнопок?Большое спасибо.

1 Ответ

3 голосов
/ 06 июня 2011

Причина, по которой вы возвращаете значение, например "GTKToggleButton", заключается в том, что вы не задали имя вручную с помощью gtk_widget_set_name. Согласно документации GTK:

Имена виджетов являются типом виджета по умолчанию (например, "GtkButton") или могут быть установлены в специфическое для приложения значение с помощью gtk_widget_set_name ().

Так что используйте gtk_widget_set_name, чтобы создавать собственные имена для ваших кнопок, и, если вам нужно более четкое различие между объектами, используйте gtk_widget_path, чтобы получить полное имя пути для объекта. то есть он вернет полную иерархию окон, что позволит вам различать кнопки с одинаковыми именами в отдельных окнах или сгруппировать кнопки по именам родительских окон и т. д.

Редактировать: Вы также можете использовать gtk_buildable_get_name, чтобы получить фактическое значение идентификатора виджета из файла определения интерфейса XML. Так что это еще один вариант, если вы хотите избежать использования gtk_widget_set_name. Я предполагаю, что ваше определение XML UI совместимо с GTKBuilder.

...