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

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 г.
Перевод: А.Панин
Дата перевода: 10 Апреля 2014 г.

30. Рекомендуемые техники

В данной главе производится простое обобщение полученной ранее информации, формулируются обобщенные руководящие принципы в отношении стиля кода, а также даются советы по созданию приложений на основе gtkmm.

Используйте инструменты autoconf и automake от проекта GNU! Это ваши друзья :) Automake исследует файлы исходного кода языка C, устанавливает зависимости между ними и генерирует файлы Makefile для компиляции файлов исходного кода в корректной последовательности. Autoconf позволяет производить автоматическую конфигурацию устанавливаемого программного обеспечения, обрабатывая большое количество системных параметров для улучшения переносимости программного обеспечения между платформами.

Используйте подклассы виджетов для улучшения организации вашего кода. По крайней мере, вы наверняка будете создавать подкласс для главного окна вашей программы. После этого вы сможете сделать ваши дочерние виджеты и обработчики сигналов членами этого класса.

Создавайте ваши собственные сигналы вместо передачи указателей. Объекты могут взаимодействовать друг с другом посредством сигналов и их обработчиков. Это гораздо проще, чем использовать объекты с указателями на другие объекты и вызывать методы других объектов с помощью этих указателей. Классы gtkmm используют специальные версии класса sigc::signal, но вы должны использовать обычные сигналы на основе класса sigc::signal таким образом, как это описано в документации библиотеки libsigc++.

30.1. Время жизни приложения

Большинство приложений имеет только одно окно или только одно главное окно. В таких приложениях может использоваться перегруженный метод Gtk::Application::run(Gtk::Window&). Он позволяет показать окно и возвращает управление в момент, когда оно скрывается. Это случается тогда, когда пользователь закрывает окно или тогда, когда в вашем коде осуществляется вызов метода hide() объекта окна. Вы можете запретить пользователю закрывать окно (например, в том случае, если присутствуют несохраненные изменения), перекрывая метод Gtk::Window::on_delete_event().

В большинстве наших примеров используется именно эта техника.

30.2. Использование виджетов из состава gtkmm

Мы старались сделать так, чтобы все примеры кода имели одинаковую структуру. В этих примерах процесс создания виджета делится на следующие этапы:
  1. Декларация переменной типа, соответствующего типу используемого виджета, обычно в качестве переменной унаследованного контейнерного класса. Вы также можете объявить указатель с типом виджета и после этого создать объект виджета с помощью оператора new самостоятельно в вашем коде. Даже при использовании виджета посредством указателя, скорее всего, лучшим вариантом является объявление этого указателя как переменной контейнерного класса для возможности последующего доступа к нему.
  2. Установка атрибутов виджета. В том случае, если виджет не имеет стандартного конструктора, вам придется инициализировать виджет в рамках списка инициализации конструктора вашего контейнерного класса.
  3. Установка подходящих обработчиков для любых сигналов, которые вы хотели бы использовать.
  4. Упаковка виджета в контейнер с помощью подходящего вызова, т.е., Gtk::Container::add() или pack_start().
  5. Вызов метода show() для показа виджета.

Метод Gtk::Widget::show() сообщает gtkmm о том, что мы закончили установку атрибутов виджета и он готов для показа. Вы можете использовать метод Gtk::Widget::hide() для повторного сокрытия виджета. Порядок, в котором вы показываете виджеты, не является существенным, но мы советуем вам показывать окна верхнего уровня в последнюю очередь; таким образом, окно будет показано с уже прорисованным содержимым. В противном случае пользователь сначала увидит пустое окно, в котором будут впоследствии прорисованы виджеты.


Следующий раздел : Сотрудничество.