【问题标题】:Show GtkApplicationWindow after close关闭后显示 GtkApplicationWindow
【发布时间】:2018-09-27 02:06:55
【问题描述】:

对于 C 和 Gtk+,我是个完全的新手。

我正在尝试创建一个带有主应用程序窗口的界面。这个主窗口有一个菜单,可以打开第二个窗口(类型为 GtkApplictionWindow)。

我的问题是,一旦我关闭第二个窗口(顶部有 x),我就无法再次打开第二个窗口。

我收到一个错误:

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

我尝试将函数附加到destroyhide 信号,在我的代码中我尝试了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");
}

帮助?

【问题讨论】:

    标签: c gtk glade


    【解决方案1】:

    如果你使用“X”关闭一个窗口,它不仅会被隐藏,还会在之后被销毁。 显然,您以后不能重用该小部件。您需要重新创建它。

    这就是gtk_widget_hide_on_delete() 派上用场的地方。

    您可以直接将其连接到"delete-event" 信号,或者您可以在您的处理程序中为该信号调用它。 然后小部件只是隐藏,但可以稍后再次显示。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多