, поэтому может содержать только один дочерний виджет. Но этот виджет может принадлежать классу
Gtk::Вох
или любому другому контейнеру, допускающему несколько потомков. Ряд виджетов GTK+, в том числе и
Gtk::TextView
, автоматически взаимодействуют с
Gtk::ScrolledWindow
, не требуя почти никакого дополнительного кода.
В данном примере мы создали виджет
Gtk::ScrolledWindow
с именем
scroller
и сконфигурировали его методом
set_policy
. Мы решили не отображать горизонтальную
полосу прокрутки вовсе, а вертикальную — только тогда, когда в редакторе больше строк, чем видно в окне. Сам текстовый редактор сделан непосредственным потомком
scroller
.
Теперь надо настроить контейнер
Gtk::Vbox
, который расположит наши виджеты по вертикали. Сначала добавляется прокручиваемое окно, содержащее поле ввода, поэтому оно окажется самым верхним. Метка
@status
располагается под ним. Напоследок сам контейнер добавляется в главное окно.
В следующих четырех строчках в поле ввода добавляется текст. В первой строчке мы получаем объект
Gtk::TextIter
, соответствующий началу текста (offset = 0), и вставляем в это место строку. Поскольку до этого момента никакого текста в поле еще не было, только сюда и можно его вставить. Затем вставляется другой кусок текста со смещением 5. В результате редактор будет содержать строку
This really is an editor
.
Поскольку мы предварительно установили обработчик события
changed
, он будет вызываться после каждого обращения к
insert
. Следовательно, статус будет отображаться правильно, несмотря на то что пользователь еще не вносил никаких изменений в текст.
12.2.5. Прочие виджеты
Даже для организации сравнительно простого графического интерфейса текстовых полей и кнопок может оказаться недостаточно. Нужны переключатели, флажки и другие виджеты. В следующем примере демонстрируются некоторые из них.
В листинге 12.7 предполагается, что пользователь хочет заказать билет на самолет. Для выбора города назначения используются классы
Gtk::TreeView
,
Gtk::ListStore
и
Gtk::TreeViewColumn
(многоколонный список). Флажок (класс
Gtk::CheckButton
) определяет, нужен ли обратный билет, а переключатель (класс
Gtk::RadioButton
) позволяет указать класс салона. Завершает интерфейс кнопка
В этом приложении, как и в предыдущих примерах, создается главное окно с обработчиком события. Затем формируется список с двумя колонками, дизайн которого следует паттерну Модель-Вид-Контроллер (Model-View-Controller — MVC); класс