GTK断言第二次失败

时间:2014-05-23 11:54:30

标签: c gtk

我在Fedora 20下使用带有C的GTK + 3.10来显示一个窗口,用户可以从组合框中选择一个选项,然后按一个按钮,该按钮将显示一个带有所选选项和图像的窗口。 (我使用Glade设计用户界面。)按钮的处理函数是

void on_btnDisplay_clicked(GObject *object, gpointer data)
{
    char *selectedText = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(listBox));
    char imgPath[50];
    memset(imgPath, 0, sizeof(imgPath));

    sprintf(imgPath, "images/%s.png", selectedText);

    gtk_label_set_text(GTK_LABEL(lblText), selectedText);
    gtk_image_set_from_file(GTK_IMAGE(imgBox), imgPath);

    gtk_widget_show(wndDisplay);
}

给定listBoxlblTextimgBoxwndDisplay是GtkWidget *类型的全局变量,指向我的UI中的小部件。没有用于销毁wndDisplay的处理程序。

这在我第一次在跑步中尝试时效果很好,但是如果我关闭显示窗口,选择不同的东西再试一次,它会失败,在控制台中显示几个错误(但没有分段错误) - 三个形式“Gtk-CRITICAL **:...断言失败”和两个“GLIB-GObject-WARNING **:无效的未声明指针”。

为什么第二次尝试显示窗口时会发生这种情况?我的猜测是我必须以某种方式处理来自窗口的破坏信号,但是如何?

2 个答案:

答案 0 :(得分:0)

如果你想破坏你的第二个窗口",只需使用

  g_signal_connect_swapped (wndDisplay, "destroy",
                            G_CALLBACK (gtk_widget_destroy), wndDisplay)

如果您的问题是,那么您将返回主窗口。 顺便问一下,为什么你再次使用memset和sprintf?

答案 1 :(得分:0)

我设法解决了我必须在关闭时隐藏窗口而不是销毁窗口。所以使用

gtk_widget_hide(wndDisplay)

处理窗口的删除事件就可以了。