Библиотека сайта 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
Перевод: А.Панин
7. Виджеты общего назначения
7.1. Виджет вывода строки (Label)
Использование виджетов вывода строк является основным способом вывода текста в окнах, например, с целью размещения заголовка для представленного классом Gtk::Entry
виджета ввода строки. Вы можете задать текст с помощью конструктора или позднее с помощью методов set_text()
или set_markup()
.
Ширина виджета вывода строки будет установлена автоматически. Вы можете разделить выводимую строку на несколько строк, разместив символы переноса строк ("\n") в исходной строке.
Выводимый текст может выравниваться с помощью метода set_justify()
. Виджет также имеет функцию переноса слов, которая активируется с помощью метода set_line_wrap()
.
Класс Gtk::Label
поддерживает функции простого форматирования текста, к примеру, позволяя вам сделать определенный текст жирным, выделить его с помощью цвета или увеличить его размер. Вы можете выполнить описанные действия, передавая исходную строку методу set_markup()
и используя синтаксис разметки Pango. Например, <b>выделенный жирным текст</b>
или <s>перечеркнутый текст</s>
.
7.1.1. Пример
Ниже приведен короткий пример, иллюстрирующий описанные функции. В этом примере используется виджет рамки для лучшей демонстрации стилей строк. (Виджет рамки описывается в разделе "Рамка (Frame)").
Рисунок 7-1: Виджеты вывода строк
Файл examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
7.2. Виджет ввода строки (Entry)
7.2.1. Стандартные приемы работы
Виджеты ввода строк позволяют пользователю вводить текст. Вы можете изменить содержимое поля ввода виджета с помощью метода set_text()
, а также получить его текущее содержимое с помощью метода get_text()
.
Иногда вам может понадобиться сделать текст в поле ввода виджета доступным только для чтения. Эта задача может быть решена путем передачи логического значения false
в качестве параметра метода set_editable()
.
В случае ввода пролей, кодовых фраз и другой информации, которую вам не хотелось бы отображать на экране, для скрытия текста в поле ввода виджета может использоваться вызов метода set_visibility()
с передачей логического значения false
в качестве параметра.
У вас может возникнуть желание получать уведомления в те моменты, когда пользователь вводит текст с помощью виджета ввода строки. Для этой цели класс Gtk::Entry
предоставляет два сигнала, а именно сигналы "activate"
и "changed"
. Сигнал "activate"
генерируется тогда, когда пользователь нажимает клавишу Enter в поле ввода виджета; сигнал "changed"
генерируется тогда, когда текст в поле ввода виджета изменяется. Вы можете использовать эти сигналы, например, для проверки или фильтрации вводимого пользователем текста. Перенос фокуса ввода на другой виджет может также говорить о том, что пользователь закончил ввод текста. Сигнал "focus_out_event"
унаследован классом Gtk::Entry
от класса Gtk::Widget
и позволяет получать уведомления о подобный действиях. Раздел "Выпадающее меню с полем ввода" содержит примеры программ, в которых используются описанные сигналы.
В том случае, если при вызове метода set_activates_default()
вы передадите логическое значение true
в качестве параметра, нажатие кнопки Enter в поле ввода представленного классом Gtk::Entry
виджета ввода строки приведет к активации стандартного виджета окна, содержащего этот виджет ввода строки. Это особенно полезно при создании окон диалогов. Стандартным виджетом в подобных случаях обычно является одна из кнопок диалога, которая, например, приводит к закрытию окна диалога. Для того, чтобы сделать виджет стандартным виджетом окна, следует использовать методы Gtk::Widget::set_default()
и Gtk::Widget::grab_default()
.
7.2.1.1. Простой пример использования виджета ввода строки
Этот пример иллюстрирует метод использования класса Gtk::Entry
. Также в нем используются два флажка, с помощью которых вы можете устанавливать возможность редактирования строки и видимость введенных символов.
Рисунок 7-2: Пример использования виджета ввода строки
Файл examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
7.2.2. Автоматическое завершение ввода
Виджет ввода строки может генерировать раскрывающийся список с предварительно заданными вариантами строк на основе нескольких первых введенных пользователем символов. Например, диалог поиска может предлагать варианты запросов, исследуя историю запросов.
Для активации этих функций вы должны создать объект завершения ввода на основе класса Gtk::EntryCompletion
и передать его виджету ввода строки с помощью метода set_completion()
.
Объект Gtk::EntryCompletion
может использовать содержащую возможные варианты ввода модель древовидной структуры, реализованную в рамках класса Gtk::TreeModel
и передаваемую объекту виджета с помощью метода set_model()
. После этого вы должны вызвать метод set_text_column()
для указания того, какой из столбцов вашей модели должен использоваться для подбора возможных вариантов текстового ввода.
Альтернативным решением, применяемым вместо списка вариантов ввода в том случае, если полный список возможных вариантов ввода является очень большим и сложным для генерации, является использование функции обратного вызова, передаваемой с помощью метода set_match_func()
. Этот подход также полезен в том случае, если вы хотите производить поиск на основе произвольного фрагмента строки вместо ее первых символов.
7.2.2.1. Пример автоматического завершения ввода
В данном примере на основе класса Gtk::EntryCompletion
создается объект, который ассоциируется с виджетом, представленным классом Gtk::Entry
. Для завершения ввода используется реализованная в рамках класса Gtk::TreeModel
модель древовидной структуры с возможными вариантами ввода, а также некоторые дополнительные действия.
Рисунок 7-3: Пример автоматического завершения ввода
Файл examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
7.2.3. Иконки в поле ввода
В данном примере показан представленный классом Gtk::Entry
виджет ввода строки со стандартной иконкой поиска, причем при нажатии на иконку осуществляется вывод текста в терминал.
Рисунок 7-4: Виджет ввода строки с иконкой
Файл examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
7.2.4. Индикатор выполнения задачи в поле ввода
Виджет ввода строки может показывать индикатор выполнения задачи в поле ввода под введенным текстом. Этот индикатор выполнения задачи будет показан в том случае, если вызван метод set_progress_fraction()
или set_progress_pulse_step()
.
7.2.4.1. Пример использования индикатора выполнения задачи в поле ввода
В данном примере показан представленный классом Gtk:Entry
виджет ввода строки с индикатором выполнения задачи.
Рисунок 7-5: Виджет ввода строки с индикатором выполнения задачи
Файл examplewindow.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл examplewindow.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл main.cc
(для использования совместно с gtkmm 3, а не с gtkmm 2)
Следующий раздел : 7.3. Виджет изменения числового значения (SpinButton).