Glade 3 是一个完全重写过的版本,最大的特点就是去掉了代码生成的功能。这也完全符合 Glade 的初衷:界面与代码的分离。
但在Anjuta下,怎么也没办法用g_signal_connect()把Glade 3生成的控件与时间连接起来,在网上也没搜索到什么有用的资料,对比Glade2的生成文件,发现Anjuta使用了 glade_xml_new,glade_xml_get_widget,与Glade2的生成文件不同,而是直接调用了XML形式的glade。
看来只有修改Anjuta的默认生成函数GtkWidget*create_window (void)了,
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
GtkWidget *button;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);
window = glade_xml_get_widget (gxml, "window");
button = glade_xml_get_widget (gxml, "button1");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
下划线部分为自己要添加的对控件的连接,button1为在Glade 3中自己创建的按钮,也可以直接删除函数create_window,自己在main函数中调用XML。
Glade 3 + Anjuta 的使用(控件与函数的连接)
-
- 帖子: 32
- 注册时间: 2006-11-22 19:31
-
- 帖子: 18
- 注册时间: 2007-07-19 7:38
Re: Glade 3 + Anjuta 的使用(控件与函数的连接)
另一种方法:使glade_xml_signal_autoconnect ()函数生效,自动调用消息处理的回调函数llqbll 写了:Glade 3 是一个完全重写过的版本,最大的特点就是去掉了代码生成的功能。这也完全符合 Glade 的初衷:界面与代码的分离。
但在Anjuta下,怎么也没办法用g_signal_connect()把Glade 3生成的控件与时间连接起来,在网上也没搜索到什么有用的资料,对比Glade2的生成文件,发现Anjuta使用了 glade_xml_new,glade_xml_get_widget,与Glade2的生成文件不同,而是直接调用了XML形式的glade。
看来只有修改Anjuta的默认生成函数GtkWidget*create_window (void)了,
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
GtkWidget *button;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);//该函数在此失效
window = glade_xml_get_widget (gxml, "window");
button = glade_xml_get_widget (gxml, "button1");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
下划线部分为自己要添加的对控件的连接,button1为在Glade 3中自己创建的按钮,也可以直接删除函数create_window,自己在main函数中调用XML。
设置Anjuta:
Project-->Properties-->Packages-->Add Package-->添加gmodule-2.0或gmodule-export-2.0中的任意一个即可
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);//此时该函数生效
window = glade_xml_get_widget (gxml, "window");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
然后直接写回调函数即可,不需要添加任何映射
- tipfoo
- 帖子: 303
- 注册时间: 2007-07-12 16:30
- 来自: 桂林
Re: Glade 3 + Anjuta 的使用(控件与函数的连接)
原来是GTK的,要是GTKmm也能“signal_autoconnect”就好了!HotKing 写了: 另一种方法:使glade_xml_signal_autoconnect ()函数生效,自动调用消息处理的回调函数
设置Anjuta:
Project-->Properties-->Packages-->Add Package-->添加gmodule-2.0或gmodule-export-2.0中的任意一个即可
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);//此时该函数生效
window = glade_xml_get_widget (gxml, "window");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
然后直接写回调函数即可,不需要添加任何映射
上次由 tipfoo 在 2007-12-17 9:21,总共编辑 1 次。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 448
- 注册时间: 2008-07-10 15:08
Re: Glade 3 + Anjuta 的使用(控件与函数的连接)
eexpress,
我还想问问,有两个窗口,一个是连接窗口,一个是对话窗口(类似qq聊天的对话窗口)
当连接成功要打开对话窗口,打开对话窗口的同时要启动一个接收数据的函数,随时等待并接收另一端发送过来的数据,想问接收数据的函数应该与哪个窗口 的哪个信号link哪?
如下图:
附件:
Screenshot-1.png
Screenshot-1.png [ 45.6 KiB | 被浏览 20 次 ]
Screenshot.png
Screenshot.png [ 56.2 KiB | 被浏览 19 次 ]
我还想问问,有两个窗口,一个是连接窗口,一个是对话窗口(类似qq聊天的对话窗口)
当连接成功要打开对话窗口,打开对话窗口的同时要启动一个接收数据的函数,随时等待并接收另一端发送过来的数据,想问接收数据的函数应该与哪个窗口 的哪个信号link哪?
如下图:
附件:
Screenshot-1.png
Screenshot-1.png [ 45.6 KiB | 被浏览 20 次 ]
Screenshot.png
Screenshot.png [ 56.2 KiB | 被浏览 19 次 ]
- diabloneo
- 帖子: 80
- 注册时间: 2006-06-06 22:56
Re: Glade 3 + Anjuta 的使用(控件与函数的连接)
试一下builder对象llqbll 写了:Glade 3 是一个完全重写过的版本,最大的特点就是去掉了代码生成的功能。这也完全符合 Glade 的初衷:界面与代码的分离。
但在Anjuta下,怎么也没办法用g_signal_connect()把Glade 3生成的控件与时间连接起来,在网上也没搜索到什么有用的资料,对比Glade2的生成文件,发现Anjuta使用了 glade_xml_new,glade_xml_get_widget,与Glade2的生成文件不同,而是直接调用了XML形式的glade。
看来只有修改Anjuta的默认生成函数GtkWidget*create_window (void)了,
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
GtkWidget *button;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);
window = glade_xml_get_widget (gxml, "window");
button = glade_xml_get_widget (gxml, "button1");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
下划线部分为自己要添加的对控件的连接,button1为在Glade 3中自己创建的按钮,也可以直接删除函数create_window,自己在main函数中调用XML。
gtk_builder_connect_signals(...);
-
- 帖子: 7
- 注册时间: 2008-10-29 12:21
- 联系:
-
- 帖子: 59
- 注册时间: 2008-01-05 15:12
- 联系:
Re: Glade 3 + Anjuta 的使用(控件与函数的连接)
原来这么写就行了 !不过要是很多响应的话,在一个源文件里岂不是会有N多的g_signal_connect,看起来会很乱吧.HotKing 写了: 另一种方法:使glade_xml_signal_autoconnect ()函数生效,自动调用消息处理的回调函数
设置Anjuta:
Project-->Properties-->Packages-->Add Package-->添加gmodule-2.0或gmodule-export-2.0中的任意一个即可
GtkWidget*
create_window (void)
{
GtkWidget *window;
GladeXML *gxml;
gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);//此时该函数生效
window = glade_xml_get_widget (gxml, "window");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
return window;
}
然后直接写回调函数即可,不需要添加任何映射
请问你有没有一些例子呢?发给我一些,我好学习学习~~谢了~~
sea.mail@qq.com