【GTK4】现状及学习资源小结

(点击上方公众号,可快速关注)

GTK一直”情有独钟“,这个在之前有说过:主要是因为它支持GObject Introspection,简称(GI),能实现自动化的语言绑定,别的框架要绑定另一门语言需要很大的人力去”手写“代码,而GTK则基本上只需要写很少胶水代码就能实现自动生成语言绑定的代码。带来的一个好处就是这个框架支持广泛的语言绑定,包括我喜爱的Haskell语言。

现状

GTK4终于发布了,带来了更好的 Windows 支持,这是我相对关注的。因为我主要在Windows下写一些简化工作的小工具。但经过一段时间的试用,目前还是有不少问题的:

  • 开发库的支持还比较初级

    各Linux发行版、FreeBSD、msys2等软件库还基本没看到Gtk4的影子。截止到本篇文章发布时,只有ArchLinux的Aur软件库和msys2包含Gtk4的软件开发库。但它们支持的版本还是3.99.4,所以还得静待一段时间,才能更新维护到4.0版本。

    目前msys2中3.99.4是有问题的,一些输入的组件,GtkEntryGtkTextView等,有些字母输入不进去。

    所以想尝鲜的用户最好自己编译。

  • API不是向后兼容的【实际不是问题】

    相对Gtk3,API变动还是挺大的,毕竟是一个大的版本更新。已有使用Gtk3的项目可以继续使用Gtk3,毕竟迁移是需要成本的;新项目可以考虑使用Gtk4,能用上最新的特性。Gtk3的支持周期是很长的,而且不同版本的Gtk是可以共存的,这跟我们经常说的API兼容还不太一样,每个版本的Gtk更像是独立的产品,虽然相似点很多。

    所以准确来讲,这一点不是问题。

  • API还需进一步完善

    举一例:

    Gtk4引入了列表视图相关的组件,这样可以在列表展示的情况下避免使用GtkTreeView相关的API,在API的易用性和性能上都提升了不少。但其依赖于GListModel接口,其简单实现GListStore的创建需要指定GType,这要求我们要展示相对复杂的数据结构时要创建GObject的子类。

    GListStore * g_list_store_new (GType item_type);

    使用GObject语义创建一个类,对于很多不熟悉的人还是比较复杂的;其C语言接口提供了不少宏可以简化这一过程,但其他语言绑定就麻烦多了,为了实现类似C++这样简单的类结构:

    struct Person {    int age;    char* name;
    };

    要写很多的样板代码。

      后续API完善的地方可能会有几个方向:

    • 提供诸如GtkStringList的简易API,这类API简化了创建成本。现在已经提供了GtkDirectoryList等api,但还不够用。

    • 其他关联的api返回GListModel类型。目前很多遗存API都是返回GList,导致新的GtkListView无法直接使用,后续可能会增加返回GListModel的函数,进一步简化GtkListView的使用。

    • 提供GtkBuilder更广泛的支持。老的GtkListStore是可以通过XML创建的,为啥新的不行?

  • 学习资源还太少

    本身GTK相关的书籍就比较少,而且还集中在Gtk3上。Gtk4的资料目前还是主要参考官方资料上,下一节主要介绍。

学习资源

  • 官方Api参考

    地址:https://gnome.pages.gitlab.gnome.org/gtk/gtk/

    提供了整个Gtk4的API参考,而且Getting Started with GTK部分提供了入门的几个示例,很具有实操性。

  • gtk4-demo

    每个例子都有演示和代码,非常难得的资源。

  • 【GTK4】现状及学习资源小结_第1张图片

喜欢我的文章,请关注我的公众号。

【GTK4】现状及学习资源小结_第2张图片

你可能感兴趣的:(java,python,编程语言,vue,javascript)