ZBLOG

invalid cast from 'GtkMenuItem' to 'GtkImageMenuItem' (traytest:11884): Gtk-CRITICAL **: 11:30:37.970: gtk_image_menu_item_set_image: assertion 'GTK_IS_IMAGE_MENU_ITEM (image_menu_item)' failed

这个错误通常是由于将 GtkMenuItem 类型的对象直接转换为 GtkImageMenuItem 类型的对象引起的。GtkImageMenuItemGtkMenuItem 的子类,但不能直接进行类型转换。

要解决这个问题,你需要使用适当的函数来创建和设置 GtkImageMenuItem 对象,并在其中添加图像。下面是一个示例代码,展示了如何正确地创建带有图像的 GtkImageMenuItem

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
    gtk_init(&argc, &argv);
    
    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
    
    GtkWidget *menu_bar = gtk_menu_bar_new();
    GtkWidget *file_menu = gtk_menu_new();
    
    // 创建一个 GtkImageMenuItem
    GtkWidget *image_item = gtk_image_menu_item_new_with_label("Open");
    
    // 创建一个图标并设置给 GtkImageMenuItem
    GdkPixbuf *icon = gdk_pixbuf_new_from_file("open.png", NULL);
    GtkWidget *image = gtk_image_new_from_pixbuf(icon);
    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(image_item), image);

    // 将 GtkImageMenuItem 添加到菜单中
    gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), image_item);
    
		gtk_widget_show_all(menu_bar);
  	
  	gtk_main();
  	
  	return 0;
}

在这个示例中,我们使用 gtk_image_menu_item_new_with_label() 函数创建了一个带有标签文本的 GtkImageMenuItem。然后,我们从文件加载一个图标,并使用 gtk_image_new_from_pixbuf() 创建一个 GtkImage 对象,然后将它设置给 GtkImageMenuItem

请注意,在示例中使用的 open.png 文件是相对于执行程序的路径。你需要确保该文件存在并且命名正确。

这样,你就可以创建带有图像的 GtkImageMenuItem 对象,而不会引发类型转换错误。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12579

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?