Можно ли расширить базовый виджет Gtk без использования конструкции в стиле GObject? - PullRequest
2 голосов
/ 24 января 2020

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

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

1 Ответ

3 голосов
/ 24 января 2020

Обычно вы бы назвали базовый конструктор следующим образом:

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 и в вашем производном классе.

...