GTK+ 2.0 Tutorial

<<< Previous

Next >>>


Краткий обзор виджетов

Основные действия для создания GTK виджетов:

  1. gtk_*_new() - одна из функций для создания виджетов. Все они детализированы в этой секции.

  2. Соединение всех сигналов и событий, которые мы собираемся использовать, с обработчиками.

  3. Установка атрибутов виджетов.

  4. Упаковка виджетов в контейнер, используя соответствующий запрос, типа gtk_container_add() или gtk_box_pack_start().

  5. Вывод виджета на экран gtk_widget_show().

gtk_widget_show() позволяет GTK выводить виджеты согласно установленным атрибутам. Для скрытия виджетов можно использовать gtk_widget_hide. Порядок вывода виджетов на экран не важен, но лучше выводить основное окно последним чтобы все виджеты в окне отображались одновременно, а не появлялись по мере их формирования. Дочерние виджеты не отображаются до тех пор, пока не показано основное для них окно с помощью функции gtk_widget_show().

Преобразование

GTK использует систему преобразования типов. Она всегда использует макросы для проверки преобразования, перед тем как выполнить его. Вот некоторые из них:

G_OBJECT (object) GTK_WIDGET (widget) GTK_OBJECT (object) GTK_SIGNAL_FUNC (function) GTK_CONTAINER (container) GTK_WINDOW (window) GTK_BOX (box)

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

Как вы можете увидеть ниже в иерархии классов, все GtkWidgets образованы из базового класса GObject. Это значит, что в любом месте где функция запрашивает виджет типа объект, вы можете использовать макрос G_OBJECT().

Пример:

g_signal_connect( G_OBJECT (button), "clicked", G_CALLBACK (callback_function), callback_data);

Здесь кнопка преобразуется в объект, и выполняется преобразование указателя функции в обратный вызов.

Многие виджеты являются контейнерами. Если вы посмотрите в иерархии классов ниже, то заметите, что много виджетов происходят из контейнерного класса. Любой из этих виджетов может использоваться с макросом GTK_CONTAINER, чтобы передать их в функции, которые запрашивают контейнеры.

К сожалению невозможно рассказать о всех макросах в данном руководстве, поэтому я рекомендую вам изучить заголовочные файлы GTK (header files) или GTK API reference manual. Это может быть очень познавательно. Фактически можно понять как работают виджеты изучая декларации функций.


<<< Previous

Home

Next >>>

Table Packing Example

 

Widget Hierarchy