Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Программирование с использованием gtkmm 3. Создание собственных сигналов

Оригинал: Programming with gtkmm 3
Авторы: Murray Cumming, Bernhard Rieder, Jonathon Jongsma, Ole Laursen, Marko Anastasov, Daniel Elstner, Chris Vine, David King, Pedro Ferreira, Kjell Ahlstedt
Дата публикации: 15 Октября 2013 г.
Перевод: А.Панин
Дата перевода: 25 Апреля 2014 г.

Приложение C. Создание собственных сигналов

Теперь, когда вы познакомились с сигналами и обработчиками сигналов, применяемыми в gtkmm, у вас может возникнуть желание использовать аналогичную технику для реализации механизма взаимодействия ваших собственных классов. На самом деле подобный механизм взаимодействия реализуется достаточно просто исключительно средствами библиотеки libsigc++.

Механизм сигналов не является исключительно технологией gtkmm для обработки событий графического интерфейса. gtkmm использует библиотеку libsigc++ с целью реализации оберток для системы сигналов GTK+, но при разработке новых, не имеющих отношения к GTK+ сигналов вы можете создавать их реализации на основе технологий языка программирования C++ путем использования шаблона sigc::signal<>.

Например, для создания сигнала, который передает 2 параметра типов bool и int, вам следует просто объявить экземпляр класса sigc::signal так же, как показано ниже:
sigc::signal<void, bool, int> signal_something;

Вы можете объявить этот сигнал как простую публичную переменную класса, но некоторые разработчики считают такие объявления некорректными и предпочитают предоставлять доступ к переменной с помощью специального метода доступа таким образом, как показано ниже:

После этого вы сможете установить обработчик сигнала, использовав точно такой же синтаксис, как и при установке обработчиков для сигналов gtkmm. Например, это может быть сделано следующим образом:
server.signal_something().connect(
  sigc::mem_fun(client, &Client::on_server_something) );

C.1. Пример

Это полнофункциональный пример, в котором описываются и применяются пользовательские сигналы.

Исходный код

Файл: server.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл: client.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл: client.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл: main.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл: server.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)


Следующий раздел : Приложение D. Сравнение со сторонними системами обработки сигналов.