【发布时间】:2012-02-04 00:05:03
【问题描述】:
我对 GTK 还很陌生,正在玩弄我的第一个“严肃”GTK (gtk+-3) 应用程序。我想借鉴其他人的经验,了解何时适合定义新的 GTK 类,或者只使用“普通”GTK 类,并通过信号处理程序实现行为。
到目前为止,我遇到了两个例子:
自定义小部件
我正在创建一个新的小部件:基本上是一个 GtkDrawingArea,我用它来显示一些数据。我最初认为实现这一点的最佳方法是使用G_DEFINE_TYPE 继承 GtkDrawingArea,并提供我自己的绘图回调:
static void mywidget_class_init(MyWidgetClass *klass)
{
GTK_WIDGET_CLASS(klass)->draw = mywidget_draw;
}
但是,我似乎可以在不定义新类型的情况下实现完全相同的功能,只需创建一个普通的 GtkDrawingArea,并在初始化期间连接适当的信号。
[我的自定义小部件最终将提供的不仅仅是绘图回调,因为它需要是交互式的,但稍后会...]
应用程序窗口
我的应用程序由几个不同的窗口组成,目前是普通的 GtkWindows:
struct myapp_somewindow {
struct myapp *app;
GtkWindow *window;
GtkWidget *some_label_that_is_updated;
/*... other window-specific fields */
}
当 myapp_somewindow 结构初始化时,我使用gtk_window_new() 创建 GtkWindow,并初始化小部件/布局/等,并连接信号。 [我可能最终会使用 .ui 文件来处理更复杂的情况,但窗口现在已经足够简单了。]
这可以通过定义 GtkWindow 的新子类来完成,但我不确定定义新类的代码开销何时变得值得。
我知道对于采用哪种方法可能没有严格的规定,但是在做出这些设计决策时是否有任何通用指南可供使用?这两种方法是否存在任何重大缺陷?
【问题讨论】:
-
gtkforums.com 可能是一个更好的提问地方。我的感觉是,如果你想象它们可能是子类,你应该费心定义你的类。