2013-12-13 2 views
0

Я только начал изучать GTK. Я просматривал исходный код gtk + 3.0.0, я нашел реализацию меток _get_type() для некоторых типов объектов gtk, но некоторые из них не имеют реализации этого метода, например GtkRange. Есть ли причина для этого? Насколько я понял из Справочного руководства GObject, метод _get_type() регистрирует тип объекта в системе типов.gtk _get_type() функция реализация

+1

Каждый виджет должен иметь '_get_type()' функции, либо явно или неявно закодированные определенные 'G_DEFINE_TYPE' и производные макросы: HTTP : //developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-DEFINE-TYPE: CAPS – ntd

+0

@ntd Я не знал о различных типах макросов .. Большое спасибо – sap

ответ

4

Функция get_type() необходима для всех типов, зарегистрированных как GType. GObject (библиотека) предоставляет макросы удобства для создания правильной реализации функции get_type() с учетом таких вещей, как инициализация с потоком или динамическая регистрация типа.

макрос, который используется для подклассов GObject (типа): G_DEFINE_TYPE(), но внутри GTK + вы также найдете G_DEFINE_TYPE_WITH_CODE(), используемый обычно, когда тип также реализует интерфейсы; G_DEFINE_ABSTRACT_TYPE() и G_DEFINE_ABSTRACT_TYPE_WITH_CODE(), используемые для абстрактных типов; и, наконец, G_DEFINE_TYPE_WITH_PRIVATE() и G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(), которые определяют подклассы GObject с частными данными, избегая вызова g_type_class_add_private() внутри функции инициализации класса.

Типы в штучной упаковке (обертки GType вокруг обычных стальных конструкций) также имеют G_DEFINE_BOXED_TYPE(), а типы интерфейсов - G_DEFINE_INTERFACE(). более

информация доступна в справочнике API для GObject:

https://developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-DEFINE-TYPE:CAPS

+0

Большое спасибо. Я не знал, что существует так много макросов. – sap

Смежные вопросы