Показать GtkApplicationWindow после закрытия - PullRequest
0 голосов
/ 26 сентября 2018

Я полный новичок, когда дело доходит до C и Gtk +.

Я пытаюсь создать интерфейс с основным окном приложения.В этом главном окне есть меню, которое открывает второе окно (типа GtkApplictionWindow).

Моя проблема в том, что как только я закрываю это второе окно (с крестиком в верхней части), я не могу открыть это второе окно снова.

Я получаю сообщение об ошибке:

(api:2807): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed

Я пытался присоединить функцию к сигналам destroy и hide, и в своем коде я пробовал обаgtk_widget_destroy(window_connections) и gtk_widget_hide(window_connections).

Мой интерфейс создан в Glade.

Вот мой текущий код:

#include <gtk/gtk.h>
#include <stdio.h>

GtkWidget       *window_connections;

int main(int argc, char *argv[]) {
    GtkBuilder  *builder;
    GtkWidget       *window;
    GtkWidget       *statusbar;

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "glade/window_main.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
    gtk_builder_connect_signals(builder, NULL);

    window_connections = GTK_WIDGET(gtk_builder_get_object(builder, "window_connections"));

    statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar"));

    gtk_statusbar_push(GTK_STATUSBAR(statusbar), 1, "Hello, World!");

    g_object_unref(builder);

    gtk_widget_show(window);
    gtk_main();

    return 0;
}

// called when window is closed
void on_window_main_destroy() {
    gtk_main_quit();
}

void window_open_connections() {
    gtk_widget_show(window_connections);
}

void window_close_connections() {
    gtk_widget_hide(window_connections);
}

void window_hide_test() {
    printf("hide\n");
}

Справка?

1 Ответ

0 голосов
/ 26 сентября 2018

Если закрыть окно с помощью «X», оно будет не только скрыто, но и уничтожено впоследствии.Очевидно, вы не сможете использовать этот виджет позже.Вам нужно будет создать его снова.

Здесь вам пригодится gtk_widget_hide_on_delete().

Вы можете напрямую подключить его к сигналу "delete-event" или можетевызовите его из вашего обработчика для этого сигнала.Тогда виджет только скрыт, но может быть показан позже.

...