Библиотека сайта rus-linux.net
Программирование с использованием gtkmm 3. Виджеты без окон оконной системы X
Оригинал: 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 г.
Перевод: А.Панин
Дата перевода: 15 марта 2014 г.
Некоторые виджеты не имеют ассоциированного окна оконной системы X, поэтому они не получают уведомления о событиях оконной системы X. Это значит, что сигналы, описанные в главе "Сигналы, соответствующие событиям оконной системы X", не будут генерироваться. Если вы хотите обрабатывать описанные события при работе с такими виджетами, вы можете использовать специальный контейнер, представленный классом Gtk::EventBox
и описанный в разделе "Контейнер приема событий (EventBox)".
Gtk::Alignment Gtk::Arrow Gtk::AspectFrame Gtk::Bin Gtk::Box Gtk::Button Gtk::CheckButton Gtk::Fixed Gtk::Frame Gtk::Grid Gtk::Image Gtk::Label Gtk::MenuItem Gtk::Notebook Gtk::Paned Gtk::RadioButton Gtk::Range Gtk::ScrolledWindow Gtk::Separator Gtk::Table (является устаревшим начиная с версии 3.4 gtkmm) Gtk::Toolbar
Эти виджеты главным образом используются в декоративных целях или для вывода информации, поэтому вам обычно не потребуется перехватывать события при работе с ними. Окна оконной системы X умышленно не используются для реализации этих виджетов с целью повышения производительности.
15.1. Контейнер приема событий (EventBox)
Некоторые виджеты из состава gtkmm не имеют ассоциированных окон оконной системы X; они используют окна родительских виджетов для прорисовки. Ввиду этого они не могут принимать уведомления о наступлении событий. Также в том случае, если размер окна верхнего уровня слишком мал, размер таких виджетов не будет корректно уменьшаться, поэтому вы можете наблюдать беспорядочные наложения одних виджетов на другие и.т.д. Для приема уведомлений о событиях с помощью одного из таких виджетов вы можете разместить этот виджет в контейнере приема событий (EventBox
) с последующим вызовом метода Gtk::Widget::set_events()
по отношению к контейнеру приема событий перед его показом.
Хотя название контейнера EventBox
и предполагает использование методики разработки с управлением событиями, этот контейнер также может быть использован для корректного сокращения размера виджета (и для других целей, о которых будет сказано в примере ниже).
Gtk::EventBox
выглядит следующим образом:
Gtk::EventBox();
event_box.add(child_widget);
15.1.1. Пример
Следующий пример демонстрирует оба варианта использования контейнера приема событий - виджет вывода строки создается таким образом, чтобы была возможность корректного изменения его размеров при размещении в небольшой области, а также при нажатии кнопки мыши с указателем над данным виджетом программа завершает свою работу. Изменение размеров окна приводит к показу невидимых частей виджета вывода строки.
Рисунок 15-1: Контейнер приема событий (EventBox)
Файл: examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Следующий раздел : Диалоги.