Инициализация GtkApplication. Должен ли я использовать «init» GObject или «start» GtkApplication? - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь создать приложение GTK-3, и в процессе инициализации я хочу проверить, установлено ли значение GSetting, в противном случае я хочу показать диалог «запуска», который будет виден только при первом запуске.

У GObject есть суффикс _init, который можно использовать для инициализации класса.В этом случае будет построено MyGtkApplication, основанное на GtkApplicationGtkApplication есть startup, что можно использовать и для инициализации.

В этом примере мне все еще нужно реализовать функцию _init для GApplicationClass.

GApplicationClass *gapp_class;

gapp_class = G_APPLICATION_CLASS (class);
gapp_class->startup = app_startup;

// This must be always implemented, because the MyGtkApplication is "GtkApplication"-based class.
void app_init(MyGtkApplication *app) {
  // Check and show the modal dialog if key does not exist?
}

// This will overwrite the GApplicatio's "startup".
void app_startup(GApplication *app) {
  // Check and show the modal dialog if key does not exist?
}

В настоящее время app_init не имеет тела.

Какая разница и какую мне использовать?

С уважением, TheAifam5.

1 Ответ

1 голос
/ 10 мая 2019

init в основном конструктор объекта GApplication. Используйте его для инициализации личных данных объекта и перевода их в согласованное состояние.

startup вызывается при запуске приложения. В частности, после того, как вы вызвали g_application_run() и цикл основного события запущен, и приложение проверило, что это единственный запущенный экземпляр. Вы не хотите показывать диалоговые окна раньше, поэтому startup - правильное место для этого.

...