我使用GTK + 3.10與Fedora 20下的C來顯示一個窗口,用戶可以從組合框中選擇一個選項,然後按下一個按鈕,該按鈕將顯示帶有選定選項的窗口,圖片。 (我用格萊德設計的用戶界面。)該按鈕的處理函數是GTK斷言失敗第二次
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);
}
給出listBox
,lblText
,imgBox
和wndDisplay
有型的GtkWidget的全局*指着小部件在我的UI。沒有破壞wndDisplay
的處理程序。
這在第一次嘗試運行時效果很好,但如果關閉顯示窗口,請選擇不同的東西然後重試,失敗,在控制檯中顯示幾個錯誤(但沒有分段錯誤)格式「Gtk-CRITICAL **:...聲明失敗」以及兩個「GLib-GObject-WARNING **:無效的未聲明的演員指針」。
爲什麼第二次嘗試顯示窗口會發生這種情況?我的猜測是我必須以某種方式處理來自窗戶的摧毀信號,但是如何?
這不能解決問題。圖像的文件名稱與擴展名爲「.png」的組合框中的選項相對應。我使用sprintf將文件路徑放在一起,並使用memset清除數組在聲明時可能出現的任何垃圾。 – ofperkins