Когда определять класс GTK, когда использовать сигналы?

Я довольно новичок в GTK и возился со своим первым "серьезным" приложением GTK (gtk+-3). Я хотел бы обратиться к опыту других людей, чтобы узнать, когда уместно определить новый класс GTK, или просто использовать "ванильные" классы GTK, и реализовать поведение через обработчики сигналов.

На данный момент я нашел два примера:

Пользовательские виджеты

Я создаю новый виджет: по сути, GtkDrawingArea, который я использую для отображения некоторых данных. Изначально я предполагал, что лучшим способом реализации этого будет подкласс GtkDrawingArea, использующий G_DEFINE_TYPE, и предоставление собственного обратного вызова draw:

static void mywidget_class_init(MyWidgetClass *klass)
{
    GTK_WIDGET_CLASS(klass)->draw = mywidget_draw;
}

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

[Мой пользовательский виджет в конечном итоге будет предоставлять больше, чем просто обратный вызов draw, поскольку он должен быть интерактивным, но об этом позже... ]

Окна приложения

Мое приложение состоит из нескольких различных окон, которые в настоящее время являются ванильными GtkWindows:

struct myapp_somewindow {
    struct myapp *app;
    GtkWindow    *window;
    GtkWidget    *some_label_that_is_updated;
    /*... other window-specific fields */
}

Когда инициализируется структура myapp_somewindow, я создаю GtkWindow с помощью gtk_window_new(), инициализирую виджеты/макеты/etc и подключаю сигналы. [Вероятно, со временем я буду использовать .ui файлы для более сложных случаев, но пока окна достаточно просты]

Это можно сделать, определив новый подкласс GtkWindow, но я не уверен, когда накладные расходы на определение нового класса станут оправданными.


Я понимаю, что, вероятно, нет строгих правил для выбора подхода, но есть ли какие-нибудь общие рекомендации, которые можно использовать при принятии таких решений? Есть ли какие-нибудь основные подводные камни в любом подходе?

9
задан Jeremy Kerr 6 January 2012 в 07:39
поделиться