Я довольно новичок в GTK, и я возился с моим первым "серьезным" приложением GTK (gtk + -3).Я хотел бы использовать мудрость чужого опыта о том, когда уместно определить новый класс GTK или просто использовать «ванильные» классы GTK и реализовать поведение с помощью обработчиков сигналов.
Я имеюДо сих пор сталкивался с двумя примерами:
Пользовательские виджеты
Я создаю новый виджет: в основном GtkDrawingArea, который я использую для отображения некоторых данных.Первоначально я предполагал, что лучший способ реализовать это - создать подкласс GtkDrawingArea, используя G_DEFINE_TYPE
, и предоставить свой собственный обратный вызов отрисовки:
static void mywidget_class_init(MyWidgetClass *klass)
{
GTK_WIDGET_CLASS(klass)->draw = mywidget_draw;
}
Однако, похоже, я мог бы реализовать точно такую же функциональностьбез определения нового типа, просто создав ванильный объект GtkDrawingArea и подключив соответствующие сигналы во время инициализации.
[Мой пользовательский виджет в конечном итоге предоставит больше, чем просто обратный вызов отрисовки, поскольку он должен быть интерактивным, ноэто произойдет позже ...]
Приложение Windows
Мое приложение состоит из нескольких различных окон, которые в настоящее время являются ванильными 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()
, инициализирую виджеты / макеты / и т. д. и подключаю сигналы.[Вероятно, в конечном итоге я буду использовать файлы .ui для более сложных случаев, но окна пока достаточно просты.]
Это можно сделать, определив новый подкласс GtkWindow, но я неОпределенно, когда накладные расходы на код при определении нового класса становятся целесообразными.
Я знаю, что, вероятно, нет строгих правил для какого подхода, но есть какие-то общие рекомендации, которые следует использовать при создании этих проектоврешения?Есть ли серьезные подводные камни в любом подходе?