当前位置: 技术问答>linux和unix
GTK,有关创建菜单的问题,请高手解答。(来者有分)
来源: 互联网 发布时间:2016-08-20
本文导语: 最近在学习GTK,但是在创建菜单的时候出了些问题。问题出在使用GtkItemFactoryEntry结构的地方。 我创建了一个如下的GtkItemFactoryEntry结构: static GtkItemFactoryEntry menu_items[] ={ {"/文件(_F)", NULL, NULL, 0, ""}, {"/文件(...
最近在学习GTK,但是在创建菜单的时候出了些问题。问题出在使用GtkItemFactoryEntry结构的地方。
我创建了一个如下的GtkItemFactoryEntry结构:
static GtkItemFactoryEntry menu_items[] ={
{"/文件(_F)", NULL, NULL, 0, ""},
{"/文件(_F)/新建", NULL, on_menu_activate, "新建", "", GTK_STOCK_NEW},
{"/文件(_F)/打开", NULL, on_menu_activate, "打开", "", GTK_STOCK_OPEN},
{"/文件(_F)/保存", NULL, on_menu_activate, "保存", "", GTK_STOCK_SAVE},
{"/文件(_F)/另存为", NULL, on_menu_activate, "另存为", "", GTK_STOCK_SAVE_AS},
{"/文件(_F)/退出", NULL, on_menu_activate, "退出", "", GTK_STOCK_QUIT},
{"/编辑(_E)", NULL, NULL, 0, ""},
{"/编辑(_E)/剪切", NULL, on_menu_activate, "剪切", "", GTK_STOCK_CUT},
{"/编辑(_E)/复制", NULL, on_menu_activate, "复制", "", GTK_STOCK_COPY},
{"/编辑(_E)/粘贴", NULL, on_menu_activate, "粘贴", "", GTK_STOCK_PASTE},
{"/编辑(_E)/查找", NULL, on_menu_activate, "查找", "", GTK_STOCK_FIND},
{"/帮助(_H)", NULL, NULL, 0, ""},
{"/帮助(_H)/关于...", NULL, on_menu_activate, "关于", "", NULL}
};
程序是抄的教材上的,并没有错误,别人的也能通过。但是放在我的电脑上面就出错了。
编译的时候出现了以下错误:
error: initializer element is not constant
error: (near initialization for ‘menu_items[1].callback_action’)
在网上查了一些资料,有的GtkItemFactoryEntry结构是含有5项,有的是含有6项。
有的GtkItemFactoryEntry的结构如下:
struct _GtkItemFactoryEntry
{
gchar *path; (1)
gchar *accelerator; (2)
GtkItemFactoryCallback callback; (3)
guint callback_action; (4)
/* possible values:
* NULL -> ""
* "" -> ""
* "" -> create a title item
* "" -> create a simple item
* "" -> create an item holding an image
* "" -> create an item holding a stock image
* "" -> create a check item
* "" -> create a toggle item
* "" -> create a radio item
* -> path of a radio item to link against
* "" -> create a separator
* "" -> create a tearoff separator
* "" -> create an item to hold sub items
* "" -> create a right justified item to hold sub items
*/
gchar *item_type; (5)
/* Extra data for some item types:
* ImageItem -> pointer to inlined pixbuf stream
* StockItem -> name of stock item
*/
gconstpointer extra_data; (6)
};
还有一种是5项的:
struct GtkItemFactoryEntry
{
gchar *path;
gchar *accelerator;
GtkItemFactoryCallback callback;
guint callback_action;
gchar *item_type;
};
然后我把上面的程序按照5项的来写后就通过了。不过现在更迷惑了,到底哪个是对的呢,应该是都正确,但是我为什么我的这个用第一种结构就会出错呢,还请高手指点。
我创建了一个如下的GtkItemFactoryEntry结构:
static GtkItemFactoryEntry menu_items[] ={
{"/文件(_F)", NULL, NULL, 0, ""},
{"/文件(_F)/新建", NULL, on_menu_activate, "新建", "", GTK_STOCK_NEW},
{"/文件(_F)/打开", NULL, on_menu_activate, "打开", "", GTK_STOCK_OPEN},
{"/文件(_F)/保存", NULL, on_menu_activate, "保存", "", GTK_STOCK_SAVE},
{"/文件(_F)/另存为", NULL, on_menu_activate, "另存为", "", GTK_STOCK_SAVE_AS},
{"/文件(_F)/退出", NULL, on_menu_activate, "退出", "", GTK_STOCK_QUIT},
{"/编辑(_E)", NULL, NULL, 0, ""},
{"/编辑(_E)/剪切", NULL, on_menu_activate, "剪切", "", GTK_STOCK_CUT},
{"/编辑(_E)/复制", NULL, on_menu_activate, "复制", "", GTK_STOCK_COPY},
{"/编辑(_E)/粘贴", NULL, on_menu_activate, "粘贴", "", GTK_STOCK_PASTE},
{"/编辑(_E)/查找", NULL, on_menu_activate, "查找", "", GTK_STOCK_FIND},
{"/帮助(_H)", NULL, NULL, 0, ""},
{"/帮助(_H)/关于...", NULL, on_menu_activate, "关于", "", NULL}
};
程序是抄的教材上的,并没有错误,别人的也能通过。但是放在我的电脑上面就出错了。
编译的时候出现了以下错误:
error: initializer element is not constant
error: (near initialization for ‘menu_items[1].callback_action’)
在网上查了一些资料,有的GtkItemFactoryEntry结构是含有5项,有的是含有6项。
有的GtkItemFactoryEntry的结构如下:
struct _GtkItemFactoryEntry
{
gchar *path; (1)
gchar *accelerator; (2)
GtkItemFactoryCallback callback; (3)
guint callback_action; (4)
/* possible values:
* NULL -> ""
* "" -> ""
* "" -> create a title item
* "" -> create a simple item
* "" -> create an item holding an image
* "" -> create an item holding a stock image
* "" -> create a check item
* "" -> create a toggle item
* "" -> create a radio item
* -> path of a radio item to link against
* "" -> create a separator
* "" -> create a tearoff separator
* "" -> create an item to hold sub items
* "" -> create a right justified item to hold sub items
*/
gchar *item_type; (5)
/* Extra data for some item types:
* ImageItem -> pointer to inlined pixbuf stream
* StockItem -> name of stock item
*/
gconstpointer extra_data; (6)
};
还有一种是5项的:
struct GtkItemFactoryEntry
{
gchar *path;
gchar *accelerator;
GtkItemFactoryCallback callback;
guint callback_action;
gchar *item_type;
};
然后我把上面的程序按照5项的来写后就通过了。不过现在更迷惑了,到底哪个是对的呢,应该是都正确,但是我为什么我的这个用第一种结构就会出错呢,还请高手指点。
|
你要看你系统头文件里面定义的是什么样的?
库的版本更新了,这些结构变化很正常,你要看你系统对应的gtk版本的头文件具体是哪一个
库的版本更新了,这些结构变化很正常,你要看你系统对应的gtk版本的头文件具体是哪一个