16七/109
GtkApplication – GTK+ 3 中的 Application 支持
GTK+ 3 在紧锣密鼓的开发之中,虽然说 3.0 版本相对于 GTK+ 2 在编程方面的改变并不大,不过仍然有些改变是和 GTK+ 使用者密切相关的,比如新加入的 GtkApplication 类。
大家知道开始学习 GTK+ 的一个难点就是莫名其妙的 gtk_init()、gtk_main(),以及 quit、destroy 等信号的区别之类的,简单来说,一个 Hello World 程序的构建过程很让人困惑,感觉就像记住了一个模板,每次都要写一次。
GTK+ 3 为了解决这个问题,抽象出了 GtkApplication 这个类,那么一切都变得容易理解起来:gtk_init() 就是 GtkApplication 的构造函数,现在只需要调用 gtk_application_new() 就可以,gtk_main() 现在变成了 gtk_application_run(),意义很明显,而程序的退出也只需要连接 GtkApplication 类的 quit 信号即可。
GtkApplication 默认自带一个 GtkWindow,可以通过 gtk_application_get_window() 获得,因此一个新的 Hello World 看起来可能是这样:
#include <gtk/gtk.h>
int
main (int argc, char **argv)
{
GtkApplication *app;
GtkWindow *window;
app = gtk_application_new ("org.gtk.Example", &argc, &argv);
window = gtk_application_get_window (app);
gtk_container_add (GTK_CONTAINER (window), gtk_label_new ("Hello world"));
gtk_widget_show_all (GTK_WIDGET (window));
gtk_application_run (app);
return 0;
}
怎么样,是不是简单明了得多?
更多关于 GtkApplication 类的信息可以参照 GTK+ Reference Manual。
原创文章,转载请注明: 转载自K.I.S.S. - 简单哲学

你可能对这些感兴趣:

2010年07月16日 11:45
现在开始期待 基于GTK4的Gnome 4……GTK这样每版发明一次轮子的做法让人很失望。
2010年07月16日 12:10
@DaNmarner, 呵呵,发明轮子的是 GNOME,不是 GTK+ 吧……
2010年07月16日 12:30
@Iven Day, GTK3不是重写的么……从头开始写的!
2010年07月16日 12:39
@DaNmarner, 不是……就是把一些弃用的函数去掉,然后做了些其他工作,还是基于 GTK2.
2010年07月16日 12:53
@Iven Day, 对啊,完全不是。GTK+3是很平滑地进化上去的,我是看着它进化的,比Qt3->Qt4那是平滑不知多少倍。
2010年11月14日 15:43
Qt为了库的二进制兼容,只能增加新C++类,或者为原有的类增加静态方法。
一旦有类virtual成员函数的改变,将不能保证之前写的程序也能在新版本的so文件下运行。
所以送Qt3->4的时候,就就把原先的类加了Q3前缀移入qt3support并以基于Qt4实现代理模式。
GTK是C语言的,就没有这方面的约束了,只要原先导出函数都能工作即可向后兼容。
2011年03月09日 12:20
還是有一樣的問題的. 放在 structure 中的 field 只要一改變, 一樣是有 binary incompatible 的問題的.
2011年03月09日 14:30
嗯,只是说学习曲线不会有问题,二进制接口上肯定不兼容的。
2011年08月15日 14:22
嗯,最近脑袋才开窍,原来这个GtkApplication是用来替代libgnome的!