【问题标题】:Is it possible to extend base Gtk widget without using GObject style construction?是否可以在不使用 GObject 样式构造的情况下扩展基本 Gtk 小部件?
【发布时间】:2020-05-10 20:03:10
【问题描述】:

我是如何从我的previous questionGObject 样式构造中发现的,vala 类定义不需要。但是很多 gtk 应用程序在扩展基本小部件时使用这种方式。例如,elementary os app centerGtk.ApplicationWindow 类执行此操作。

所以我的问题是,我可以在不使用 Object() 构造的情况下扩展任何基础 Gtk 类吗?

【问题讨论】:

    标签: gtk vala gobject


    【解决方案1】:

    通常你会像这样调用基础构造函数:

    public class MainWindow : Gtk.ApplicationWindow {
        public MainWindow (Gtk.Application application) {
            base (application);
        }
    }
    

    这不适用于本身使用 GObject 样式构造参数的类。

    如您所见,从此类派生的正确方法是:

    public class MainWindow : Gtk.ApplicationWindow {
        public MainWindow (Gtk.Application application) {
            Object (application: application);
        }
    }
    

    这并没有太大的不同,只是您必须指定每个属性的名称并使用 Object 类(在 C 中是 GObject)而不是指定 base

    PS:在我对您的另一个问题 (How does GObject style construction work?) 的回答中,我的意思是当您编写自己的其他人可以从中派生的类时,您不需要使用 GObject 样式构造。反过来说,Gtk.MainWindow 的设计也迫使你在派生类中使用 GObject 风格的构造。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 2015-03-22
      • 2016-03-11
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2019-12-21
      • 2012-03-21
      相关资源
      最近更新 更多