Можно ли расширить базовый виджет Gtk без использования конструкции в стиле GObject?

Как я узнал из моего предыдущего вопроса, конструкция в стиле GObject не требуется для определения класса вала. Но многие приложения gtk используют этот способ при расширении базового виджета. Например, элементарный центр приложений ОС Gtk.ApplicationWindow класс.

Итак, мой вопрос: могу ли я расширить любой базовый класс Gtk без использования конструкции Object()?


person Ennjin    schedule 24.01.2020    source источник


Ответы (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 (который является GObject в C) вместо указания base.

PS: В моем ответе на ваш другой вопрос ( Как стиль GObject строительные работы? ) я имел в виду, что вам не нужно использовать конструкцию в стиле GObject, когда вы пишете свои собственные классы, от которых могут быть получены другие. Здесь все наоборот, дизайн Gtk.MainWindow заставляет вас использовать конструкцию в стиле GObject и в вашем производном классе.

person Jens Mühlenhoff    schedule 24.01.2020