免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: chinesedragon
打印 上一主题 下一主题

[C] GTK+2.0编程范例上的一个例子,编译不过 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2012-07-27 12:15 |只看该作者
这个我早试过了,好像提示gchar*和guint不能转换之类
  1. 警告: 将一个指针转换为大小不同的整数
复制代码
starwing83 发表于 2012-07-27 12:11
都是被废弃掉的啊………………

那你只能试下这个了:

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
32 [报告]
发表于 2012-07-27 12:23 |只看该作者
回复 31# chinesedragon


    我这边没有任何警告。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
33 [报告]
发表于 2012-07-27 12:27 |只看该作者
我懂了………你是64位的系统。

恩,那无解了,不过我还是有办法:
  1. #include <gtk/gtk.h>

  2. void on_menu_activate(GtkMenuItem *menu, guint action_data);

  3. static gchar *textlist[] = {
  4.     NULL,
  5.     "退出",
  6.     "复制",
  7.     "关于",
  8. };

  9. static GtkItemFactoryEntry menu_items[] = {
  10.     {"/文件(_F)",NULL,NULL,0,"<Branch>"},
  11.     {"/文件(_F)/新建",NULL,on_menu_activate,0,"<StockItem>",GTK_STOCK_NEW},
  12.     {"/文件(_F)/-",NULL,NULL,0,"<Separator>"},
  13.     {"/文件(_F)/退出",NULL,on_menu_activate,1,"<StockItem>",GTK_STOCK_QUIT},
  14.     {"/编辑(_E)",NULL,NULL,0,"<Branch>"},
  15.     {"/编辑(_E)/复制",NULL,on_menu_activate,2,"<StockItem>",GTK_STOCK_COPY},
  16.     {"/帮助(_H)",NULL,NULL,0,"<Branch>"},
  17.     {"/帮助(_H)/关于",NULL,on_menu_activate,3,"<StockItem>",GTK_STOCK_ABOUT}
  18. };

  19. void on_menu_activate(GtkMenuItem *menu, guint action_data)
  20. {
  21.         printf("Menu %s is pressed.\n", textlist[action_data]);
  22. }

  23. int main ( int argc, char *argv[] )
  24. {
  25.     GtkWidget *window;
  26.     GtkWidget *box;
  27.     GtkWidget *menubar;
  28.     GtkAccelGroup *accel_group;
  29.     GtkItemFactory *item_factory;
  30.     gint items_count = 8;

  31.     gtk_init(&argc, &argv);

  32.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  33.     g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),
  34.             NULL);
  35.     gtk_window_set_title(GTK_WINDOW(window), "添加菜单的快捷方式");

  36.     accel_group = gtk_accel_group_new();
  37.     gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

  38.     box = gtk_vbox_new(FALSE, 0);
  39.     gtk_container_add(GTK_CONTAINER(window), box);

  40.     item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accel_group);
  41.     gtk_item_factory_create_items(item_factory, items_count, menu_items, NULL);
  42.     menubar = gtk_item_factory_get_widget(item_factory, "<main>");

  43.     gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);

  44.     gtk_widget_show_all(window);

  45.     gtk_main();
  46.     return 0;
  47. }
  48. /* cc: libs+='`pkg-config --cflags --libs gtk+-2.0`' */
复制代码

论坛徽章:
0
34 [报告]
发表于 2012-07-27 12:28 |只看该作者
我这还是不行。
  1. #include <gtk/gtk.h>

  2. void on_menu_activate(GtkMenuItem *menu, gpointer data);
  3. static GtkItemFactoryEntry menu_items[] = {
  4.         {"/文件(_F)",NULL,NULL,0,"<Branch>"},
  5.         {"/文件(_F)/新建",NULL,on_menu_activate,(guint)"New","<StockItem>",GTK_STOCK_NEW},
  6.         {"/文件(_F)/-",NULL,NULL,0,"<Separator>"},
  7.         {"/文件(_F)/退出",NULL,on_menu_activate,(guint)"quit","<StockItem>",GTK_STOCK_QUIT},
  8.         {"/编辑(_E)",NULL,NULL,0,"<Branch>"},
  9.         {"/编辑(_E)/复制",NULL,on_menu_activate,(guint)"Copy","<StockItem>",GTK_STOCK_COPY},
  10.         {"/帮助(_H)",NULL,NULL,0,"<Branch>"},
  11.         {"/帮助(_H)/关于",NULL,on_menu_activate,(guint)"About","<StockItem>",GTK_STOCK_ABOUT}
  12. };

  13. void on_menu_activate(GtkMenuItem *menu, gpointer data)
  14. {
  15.         //gprint("Menu %s is pressed.\n", (gchar*)data);
  16. }

  17. int main ( int argc, char *argv[] )
  18. {
  19.         GtkWidget *window;
  20.         GtkWidget *box;
  21.         GtkWidget *menubar;
  22.         GtkAccelGroup *accel_group;
  23.         GtkItemFactory *item_factory;
  24.         gint items_count = 8;

  25.         gtk_init(&argc, &argv);

  26.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  27.         g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),
  28.                         NULL);
  29.         gtk_window_set_title(GTK_WINDOW(window), "添加菜单的快捷方式");

  30.         accel_group = gtk_accel_group_new();
  31.         gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

  32.         box = gtk_vbox_new(FALSE, 0);
  33.         gtk_container_add(GTK_CONTAINER(window), box);

  34.         item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accel_group);
  35.         gtk_item_factory_create_items(item_factory, items_count, menu_items, NULL);
  36.         menubar = gtk_item_factory_get_widget(item_factory, "<main>");

  37.         gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);

  38.         gtk_widget_show_all(window);

  39.         gtk_main();
  40.         return 0;
  41. }
复制代码
  1. $ make
  2. gcc itemfact.c -o itemfact `pkg-config --cflags --libs gtk+-2.0`
  3. itemfact.c:6:46: 警告: 将一个指针转换为大小不同的整数 [-Wpointer-to-int-cast]
  4. itemfact.c:6:2: 错误: 初始值设定元素不是常量
  5. itemfact.c:6:2: 错误: (在‘menu_items[1].callback_action’的初始化附近)
  6. itemfact.c:8:46: 警告: 将一个指针转换为大小不同的整数 [-Wpointer-to-int-cast]
  7. itemfact.c:8:2: 错误: 初始值设定元素不是常量
  8. itemfact.c:8:2: 错误: (在‘menu_items[3].callback_action’的初始化附近)
  9. itemfact.c:10:46: 警告: 将一个指针转换为大小不同的整数 [-Wpointer-to-int-cast]
  10. itemfact.c:10:2: 错误: 初始值设定元素不是常量
  11. itemfact.c:10:2: 错误: (在‘menu_items[5].callback_action’的初始化附近)
  12. itemfact.c:12:46: 警告: 将一个指针转换为大小不同的整数 [-Wpointer-to-int-cast]
  13. itemfact.c:12:2: 错误: 初始值设定元素不是常量
  14. itemfact.c:12:2: 错误: (在‘menu_items[7].callback_action’的初始化附近)
  15. make: *** [all] 错误 1
复制代码
回复 32# starwing83


   

论坛徽章:
0
35 [报告]
发表于 2012-07-27 12:30 |只看该作者
这个还跟32和64有关系啊!
starwing83 发表于 2012-07-27 12:27
我懂了………你是64位的系统。

恩,那无解了,不过我还是有办法:

论坛徽章:
0
36 [报告]
发表于 2012-07-27 12:38 |只看该作者
我搞个32位的虚拟机再试试
starwing83 发表于 2012-07-27 12:27
我懂了………你是64位的系统。

恩,那无解了,不过我还是有办法:

论坛徽章:
0
37 [报告]
发表于 2012-07-30 08:10 |只看该作者
确实是,在32位机器上没有警告
starwing83 发表于 2012-07-27 12:27
我懂了………你是64位的系统。

恩,那无解了,不过我还是有办法:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP