GTK: Иерархия виджетов

Виджеты в GTK+ упаковываются друг в друга, формируя пользовательский интерфейс приложения, который отображается на экране. Процесс упаковки может быть как не совсем очевидным в случае использования некоторых виджетов, так и полностью прозрачным в случае использования всех других виджетов.

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

Например, все видимые виджеты основаны на классе GtkWidget. Это базовый класс, реализующий ряд методов. Все реализованные в его рамках методы могут использоваться при работе с любым виджетом, класс которого унаследован от класса GtkWidget. Одним из примеров такого метода является метод set_tooltip_text(), позволяющий задать строку всплывающей подсказки, описывающую назначение виджета.

Все это означает, что данный метод благодаря механизму наследования может использоваться при работе с такими классами, как GtkButton, GtkEntry и другими классами виджетов.

Иерархическая структура классов

Иерархическая структура классов виджетов GTK+ выглядит следующим образом:

+GtkWidget
+---GtkContainer
+------GtkBin
+---------GtkWindow
+------------GtkDialog
+---------------GtkAboutDialog
+---------------GtkAppChooserDialog
+---------------GtkColorSelectionDialog
+---------------GtkFileChooserDialog
+---------------GtkFontChooserDialog
+---------------GtkMessageDialog
+---------------GtkPageSetupUnixDialog
+---------------GtkPrintUnixDialog
+---------------GtkRecentChooserDialog
+------------GtkApplicationWindow
+------------GtkAssistant
+------------GtkOffscreenWindow
+------------GtkPlug
+------------GtkShortcutsWindow
+---------GtkActionBar
+---------GtkAlignment
+---------GtkComboBox
+------------GtkAppChooserButton
+------------GtkComboBoxText
+---------GtkFrame
+------------GtkAspectFrame
+---------GtkButton
+------------GtkToggleButton
+---------------GtkCheckButton
+------------------GtkRadioButton
+---------------GtkMenuButton
+------------GtkColorButton
+------------GtkFontButton
+------------GtkLinkButton
+------------GtkLockButton
+------------GtkModelButton
+------------GtkScaleButton
+---------------GtkVolumeButton
+---------GtkMenuItem
+------------GtkCheckMenuItem
+---------------GtkRadioMenuItem
+------------GtkSeparatorMenuItem
+---------GtkEventBox
+---------GtkExpander
+---------GtkFlowBoxChild
+---------GtkHandleBox
+---------GtkListBoxRow
+---------GtkToolItem
+------------GtkToolButton
+---------------GtkMenuToolButton
+---------------GtkToggleToolButton
+------------------GtkRadioToolButton
+---------GtkOverlay
+---------GtkScrolledWindow
+------------GtkPlacesSidebar
+---------GtkPopover
+------------GtkPopoverMenu
+---------GtkRevealer
+---------GtkSearchBar
+---------GtkSearchSidebar
+---------GtkViewport
+------GtkBox
+---------GtkAppChooserWidget
+---------GtkButtonBox
+---------GtkColorChooserWidget
+---------GtkFileChooserButton
+---------GtkFileChooserWidget
+---------GtkFontChooserWidget
+---------GtkInfoBar
+---------GtkRecentChooserWidget
+---------GtkShortcutsSelection
+---------GtkShortcutsGroup
+---------GtkShortcutsShortcut
+---------GtkStackSwitcher
+------GtkFixed
+------GtkGrid
+------GtkPaned
+------GtkIconView
+------GtkLayout
+------GtkMenuShell
+---------GtkMenuBar
+---------GtkMenu
+------------GtkRecentChooserMenu
+------GtkNotebook
+------GtkSocket
+------GtkTable
+------GtkTextView
+------GtkToolbar
+------GtkToolItemGroup
+------GtkToolPalette
+------GtkTreeView
+---GtkMisc
+------GtkLabel
+---------GtkAccelLabel
+------GtkImage
+---GtkCalendar
+---GtkDrawingArea
+---GtkEntry
+------GtkSearchEntry
+------GtkSpinButton
+---GtkRange
+------GtkScale
+------GtkScrollbar
+---GtkSeparator
+---GtkInvisible
+---GtkProgressBar
+---GtkSpinner
+---GtkSwitch
+---GtkLevelbar