Glade 3 + Anjuta 的使用(控件与函数的连接)

开发基于GTK+或QT的应用程序
回复
llqbll
帖子: 32
注册时间: 2006-11-22 19:31
送出感谢: 0
接收感谢: 0

Glade 3 + Anjuta 的使用(控件与函数的连接)

#1

帖子 llqbll » 2007-11-25 0:26

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。
头像
blackiron
帖子: 887
注册时间: 2007-05-25 16:47
来自: 上海
送出感谢: 0
接收感谢: 0

#2

帖子 blackiron » 2007-11-25 0:35

支持
HotKing
帖子: 18
注册时间: 2007-07-19 7:38
送出感谢: 0
接收感谢: 0

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#3

帖子 HotKing » 2007-12-16 19:57

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。
另一种方法:使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;
}
然后直接写回调函数即可,不需要添加任何映射
附件
anjuta_glade.png
头像
tipfoo
帖子: 303
注册时间: 2007-07-12 16:30
来自: 桂林
送出感谢: 0
接收感谢: 2 次

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#4

帖子 tipfoo » 2007-12-16 21:12

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;
}
然后直接写回调函数即可,不需要添加任何映射
原来是GTK的,要是GTKmm也能“signal_autoconnect”就好了!
上次由 tipfoo 在 2007-12-17 9:21,总共编辑 1 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2007-12-16 21:19

g_signal_connect标准的写法。glade_xml_signal_autoconnect。还真没见过。呵呵。
● 鸣学
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#6

帖子 weihua2008 » 2008-10-17 21:00

eexpress,
我还想问问,有两个窗口,一个是连接窗口,一个是对话窗口(类似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
送出感谢: 0
接收感谢: 0

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#7

帖子 diabloneo » 2008-10-23 0:52

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。
试一下builder对象
gtk_builder_connect_signals(...);
dansley
帖子: 7
注册时间: 2008-10-29 12:21
送出感谢: 0
接收感谢: 0
联系:

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#8

帖子 dansley » 2008-10-30 10:25

我想请教gtk如何自定义控件阿,哪位大虾指点指点!
Linux c/c++ gtk+
废铁
帖子: 59
注册时间: 2008-01-05 15:12
送出感谢: 0
接收感谢: 0
联系:

Re: Glade 3 + Anjuta 的使用(控件与函数的连接)

#9

帖子 废铁 » 2009-04-13 15:37

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;
}
然后直接写回调函数即可,不需要添加任何映射
原来这么写就行了 !不过要是很多响应的话,在一个源文件里岂不是会有N多的g_signal_connect,看起来会很乱吧.
请问你有没有一些例子呢?发给我一些,我好学习学习~~谢了~~ :em01
sea.mail@qq.com
回复

回到 “GTK+和QT”