glade 编辑的图形界面如何在 codeblock 中文使用。只有.glade文件

Linux中 glade3编译出错,显示 致命错误:glade/glade.h:没有那个文件或目录 #include &glade/glade.h&_百度知道
Linux中 glade3编译出错,显示 致命错误:glade/glade.h:没有那个文件或目录 #include &glade/glade.h&
我有更好的答案
没装开发包,具体是什么开发包,自己找找glade.h文件是属于哪个开发包。
gcc -Wall -g OS4.c -o program `pkg-config gtk+-2.0 --cflags --libs` -I/usr/include/libglade-2.0/ -lglade-2.0Good luck
其他类似问题
为您推荐:
glade的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1356人阅读
Glade是GTK+的界面辅助设计工具,可以通过拖放控件的方式快速设计出用户界面。建立界面:&&& 首先在Glade中建立一个窗口名为main,然后在上面放置一个按钮GtkButton名为button1,并且在&信号&标签中选中&clicked&事件,为此事件指定一个回调函数名称,例如回调函数是 void on_button_clicked(GtkWidget *widget),则只需在&clicked&事件的回调函数名称处填on_button_clicked。最后保存界面设计文件为 myWindow.glade。代码中调用:首先需要引用libglade的头文件:
#include&&glade/glade.h&
如下代码便可:
GladeXML&*xml&=&glade_xml_new(&myWindow.glade&,&NULL,&NULL);&&//载入并新建整个界面//自动连接Glade设置的回调关系&&&(刚才在Glade中我们设置了button1的clicked事件回调函数为on_button_clicked)glade_xml_signal_autoconnect(xml);//获取主窗体GtkWidget&*mainWindow&=&glade_xml_get_widget(xml,&main&);//设置窗体标题(其实在Glade中就可以设置)gtk_window_set_title(GTK_WINDOW(mainWindow),&My&Test&Window&);//获取按钮GtkWidget&*button&=&glade_xml_get_widget(xml,&button1&);
on_button_clicked代码:
void&on_button_clicked(GtkWidget&*widget)...{&&& g_print(&button1&clicked /n&);}
最后在gcc链接的时候必须加上-rdynamic参数,这样才能使glade_xml_signal_autoconnect(xml); 调用找到对应的回调函数。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:182518次
积分:2322
积分:2322
排名:第11469名
原创:21篇
转载:147篇
评论:11条
(1)(1)(1)(1)(1)(1)(7)(4)(2)(5)(3)(5)(2)(3)(3)(8)(1)(5)(18)(33)(6)(2)(2)(2)(3)(3)(2)(1)(10)(22)(10)在ubuntu下用gtk做界面,写代码烦阿!如何用Glade做完界面后获取其C代码?_百度知道
在ubuntu下用gtk做界面,写代码烦阿!如何用Glade做完界面后获取其C代码?
提问者采纳
C代码是拿不出来的。
其他类似问题
为您推荐:
gtk的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
讨厌不诚实的人,喜欢老实厚道的人
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
Table of Contents
=================
1. 关于Glade的一般信息
1.1 Glade有哪些文档?
1.2 有没有范例代码?
1.3 Glade生成的C代码必须使用特殊的许可协议吗?
2. 在Glade创建用户界面
2.1 向一个窗口加入一个控件后, 它充满了整个窗口,不能再加入任何其它控件.
2.2 如何更改控件颜色, 比如让一个标签变成红色?
2.3 如何在按钮上增加一幅位图?
2.4 如何一次性加入几个相同的控件?
2.5 使用滚动窗口时出现以下警告信息:
Gtk-WARNING **: gtk_scrolled_window_add(): cannot add non scrollable
widget use gtk_scrolled_window_add_with_viewport() instead
2.6 Glade支持哪些图象格式?
2.7 如何加入一个回调函数(signal handler)?
3. 联编(Building) Glade生成的C代码
3.1 如何联编Glade生成的代码?
3.2 出现错误信息:
aclocal: configure.in: 10: macro `AM_PATH_GTK' not found in library
3.3 出现错误信息:
** CRITICAL **: file glade_gnome.c: line 939
(glade_gnome_write_menu_item_source):
assertion `source_buffer != NULL' failed.
4. 使用Glade生成的C代码
Glade生成了哪些文件?
哪些文件可以被安全地修改,哪些会被程序覆盖?
如何向工程中加入自己的源文件?
如何向工程中加入库?
在回调函数中如何获得一个控件的指针?
如何获得另一个窗口中的控件的指针?
如何获得GtkOptionMenu的值?
当GtkOptionMenu值改变时如何调用一个函数?
如何连接到GtkAdjustment的信号?
4.10 窗口显示之前如何向其中的GtkCList控件中加入一行?
03-06-30 23:39
OK 以后就一起添加到这里好了
03-07-01 12:09
不错,谢谢楼主。
03-07-01 13:11
第1,2部分&
==============================================================================
1. 关于Glade的一般信息
==================================
1.1 Glade有哪些文档?
在GNOME版本的Glade中,帮助菜单中有快速入门教材(Quick-Start Guide)、手册和FAQ。但这些并没有涉及到使用Glade的各方面。
网络上还有一些其它文件:
o 西班牙语入门教材 -
o 意大利语入门教材 -
我并没有看到过专门介绍Glade的书, 在Wrox出版社为Linux开发者出版的一本书中其中的一章介绍到了Glade.
当有其它相关资料时,我会在上更新。
1.2 没有范例代码?
在Glade的examples/editor目录下,有一个简单的文件编辑器例子。
如果你的Glade是个二进制包 (比如一个RPM包), 这些文件可能被
安装在/usr/doc/glade-X.X.X目录下. 如果你找不到
从下载Glade的tar包。
这个网站有一些用Glade创建的程序的连接.
其中可能有一些有用的代码. 请浏览上的Application页面.
1.3 Glade生成的C代码必须使用特定的许可协议吗?
不。Glade生成的C代码可以使用任何许可协议。
不过基于开源软件的精神我们建议你使用GPL或LGPL许可协议。
==============================================================================
2. 在Glade创建用户界面
=====================================
2.1 向一个窗口加入一个控件后, 它充满了整个窗口,不能再加入任何其它控件.
这并不是Glade的一个Bug! 在GTK+中使用容器放置控件。
经常使用的容器在调色板上主页面的下部。
试着向窗口中加入一个纵向盒状容器,再向盒状容器中加入一个表格。
知道如何做了吧?
如果你想把控件放置在一个特定的位置上,
可以试一下Fixed容器。不过不推荐使用这种方法,原因是当窗口或对话框改变大小
时就显得不好看,而且当把标签和按钮上的文字翻译成其它语言后无法匹配(fit)。
2.2 如何更改控件颜色, 比如让一个标签变成红色?
可以使用GTK+的 rc文件来设置控件的颜色和字体。
如果打开了Glade中 'Set Widget Names'工程选项,可以使用控件的名字更简单地指向控件。
还可以在代码中调用来gtk_widget_modify_style()改变控件的样式,比如:
GdkColor red = { 0, 6 };
GtkRcStyle *rc_style = gtk_rc_style_new ();
rc_style-&fg[GTK_STATE_NORMAL] =
rc_style-&color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG;
gtk_widget_modify_style (widget, rc_style);
gtk_rc_style_unref (rc_style);
2.3 如何在按钮上增加一幅位图?
创建一个按钮,并在弹出菜单上选择 'Remove Label' (去掉标签)。
你现在可以向按钮中加入任何控件,比如一个内有一幅位图和一个标签的横向盒状容器。
将来Glade会有更简单的方法来创建这种按钮。
2.4 如何一次性加入几个相同的控件?
在调色板中选择控件的同时按下 'Control' 键。这个控件就会一直处于选择状态,
直到你选择了另一个控件或选择器。
2.5 使用滚动窗口时出现以下警告信息:
Gtk-WARNING **: gtk_scrolled_window_add(): cannot add non scrollable
widget use gtk_scrolled_window_add_with_viewport() instead
可以忽略这个警告。这个信息是在提醒人们更新他们的代码,
因为从GTK+ 1.0到GTK+ 1.2滚动窗口发生很大的变化,不过Glade代码是正确的。
这个警告不会出你的最终程序中。
2.6 Glade支持哪些图像格式?
如果是创建GTK+程序,图像必须是XPM格式。
(GTK+ 2.0包含了gdk-pixbuf库,可以支持很多种图像格式。)
如果是创建GNOME程序,可以使用大多数图像格式。
不过大多数图像比如图标建议选择PNG格式。
注意: 可以用GIMP程序或ImageMagick工具箱中的'convert'功能来转换图像格式。
2.7 如何加入一个回调函数(signal handler)?
按以下步骤:
o 选择要加入回调函数的控件。
o 选择属性窗口中的 'Signals'页。
o 点击'Signal:'域右边的'...'按钮,会弹出一个关于这个控件的信号列表。
o 选择准备用来连接函数的信号。
o Glade自动在'Handler:'域创建这个回调函数的名字,你可以更改这个名字。
o 按 'Add'按钮把这个回调函数加入此控件的回调函数列表中。
当产生C代码后,在callbacks.c文件中会有一个空的回调函数,你可以在其中
加入自己的代码。
03-07-01 16:59
==============================================================================
3. 联编(Building) Glade生成的C代码
=========================================
3.1 如何联编Glade生成的代码?
联编生成的C代码需要automake版本 &= 1.4以及autoconf版本 &= 2.13。
如果打开gettext支持,还需要gettext版本 &= 0.10.35。
README文件中'Requirements'节有相关的链接。
在工程的根目录下运行'./autogen.sh'来启动
automake、autoconf和相关的程序来产生Makefiles文件。configure的任何
选项都可以直接写在./autogen.sh后面,比如:
./autogen.sh --prefix /usr/local/gnome
接下来运行'make'来创建你自己的程序。
注意: 如果是GNOME程序,必须再运行'make install',这样位图文件可以被正确地安装。
不然,程序可以运行但看不到位图。
3.2 出现错误信息:
aclocal: configure.in: 10: macro `AM_PATH_GTK' not found in library
这条错误信息的意思是找不到gtk.m4文件。(gtk.m4文件是一套m4的宏,
是GTK+的一部分,用来创建GTK+程序。)
aclocal程序(automake程序的一部分)查找宏并加到程序根目录下的aclocal.m4文件中。
想知道GTK+安装在哪里,运行 'gtk-config --prefix'即可。
gtk.m4文件应该在'share/aclocal'子目录下。
想知道aclocal程序使用的目录,可以运行 'aclocal --print-ac-dir'。
应该把GTK+ m4文件的安装目录加入到ACLOCAL_FLAGS环境变量中,
比如:如果GTK+ m4文件在目录/usr/local/share/aclocal中,
在$HOME/.profile文件中加入以下内容:
export ACLOCAL_FLAGS="-I /usr/local/share/aclocal/"
3.3 出现错误信息:
** CRITICAL **: file glade_gnome.c: line 939
(glade_gnome_write_menu_item_source):
assertion `source_buffer != NULL' failed.
在仅仅是GTK+程序中使用GNOME系统菜单项。
编辑所有的菜单确保每个菜单项的"Stock"属性设为"None"。
==============================================================================
4.使用Glade生成的C代码
======================================
4.1 Glade生成了哪些文件?
以下是一些缺省的输出文件,如果你改变了工程选项,文件名称可能有所不同。
autogen.sh - 按正确次序运行automake, autoconf和其它相关程序的脚本文件,
使创建程序更简单。可以把给configure参数直接传递给它。运行
后可以键入 'make'来创建程序。
configure.in - 传递给autoconf的标准脚本,用来产生configure脚本。
Makefile.am - 传递给automake的标准make规则,用来产生Makefile.in文件。
Makefile.in可以被configure脚本转换为Makefile文件。
acconfig.h - 包含一些宏,这些宏在configure脚本中被设置,并加入到
config.h头文件中(在所有源文件中头文件应该是最先被包含进来的)。
gettext支持需要使用到大多数宏(ENABLE_NLS, HAVE_CATGETS,
HAVE_GETTEXT, HAVE_LC_MESSAGES, HAVE_STPCPY),
GNOME则需要HAVE_LIBSM宏 (but it doesn't hurt a GTK+ app),
另一些是由Glade加入的(PACKAGE_LOCALE_DIR, PACKAGE_DATA_DIR,
PACKAGE_SOURCE_DIR).
stamp-h.in - automake用来做为时间戳,以便重新创建出一些已生成的文件。
- 这些文件全是空文件, 以符合GNU的规定。
src/Makefile.am - 标准automake文件。
src/main.c - 包含main()主函数,主函数可以创建每一个窗口/对话框。
src/interface.h - 函数声明,调用这些函数可以生成Gladed中创建的窗口和对话框。
src/interface.c - 生成窗口、对话框及其它控件的代码。
src/callbacks.h - 信号及所写回调函数的声明。
src/callbacks.c - 信号处理及回调函数的代码。
src/support.h
- 一些支持函数的声明,包括lookup_widget()函数,可以通过这个
函数得到控件的指针。
src/support.c
- 支持函数的代码。
如果开启gettext支持, 会创建po子目录,POTFILES.in文件以及一个单独的ChangeLog
文件。POTFILES.in文件列出了包含有可翻译字符串的资源文件,你写的任何资源文件
也要加在里面。
对于GNOME程序,会有macros目录,包含所有用来创建工程的m4宏。(这些宏做为
GNOME的一部分应该已经安装好,但不幸的是在GNOME 1.0.X中并没有这样做。希望在
在GNOME今后的版本中会加以改正,这样就不需要这个目录了)。
*注意*: 如果在创建工程后改变了 'GNOME Support'或 'Gettext Support'工程选项,
则需要更新文件比如configure.in, Makefile.am。最好的解决方法就是在'Project
Options'对话框里改变工程目录,重新创建工程。不过得把加在回调函数的所有代码
拷贝出来。另一个方法是删除autogen.sh, configure.in, Makefile.am, src/Makefile.am,
和src/main.c文件,用Glade重新生成这些文件。不过如果你改变过这些文件,需要再把这些
更改加进去。(希望将来Glade能够改得更好一些。)
4.2 哪些文件可以被安全地修改,哪些会被程序覆盖?
Glade不会覆盖大多数文件。如果联编文件(build files)不存在,它将会重建
这些文件 (相应的工程选项要被设置)。
Glade会覆盖的文件有:
interface.h
interface.c
(如果你在工程对话框中更改了这些文件的名称,可能与以上名称不同)
这些文件最顶部会有'DO NOT EDIT'(不要编辑)的信息。
如果你加入或更新了任何信号处理,它们会加入在callbacks.h和callbacks.c文件中。
因此你加入的任何回调函数代码完全安全。如果你改变了一个回调函数的名称,则
需要把删除旧版本并将代码拷到新函数中。
4.3 如何向工程中加入自己的资源文件?
把资源文件(和任何头文件)加入到src/Makefile.am(project1_SOURCES变量的值)中
(假定'project1'是你的工程名称)。
如果使用gettext, 应该同时把资源文件加入到topo/POTFILES.in中,以便能够翻译这些
4.4 如何向工程中加入库?
你需要为在工程的configure.in文件中的库加入一个测试,
确认CPPFLAGS变量和LIBS变量已更新为库的说明。(这句不太懂)
(CPPFLAGS变量包含了所有传递给C预处理程序的 -I 标记,
LIBS变量包含了传递给连接器的-l 和 -L 选项)。
autoconf程序提供宏如 AC_CHECK_HEADER和AC_CHECK_LIB,可以
用来检查普通的头文件和库。
许多GTK+和Gnome库提供了配置脚本比如gtk-config,可以输出
所需要的CPPFLAGS和LIBS标记。
例如,libxml提供了一个xml配置脚本,可以象下面那样使用:
dnl Get libxml flags & libs
AC_PATH_PROG(xml_config, xml-config)
if test "x$xml_config" = "x"; then
AC_MSG_ERROR([*** xml-config not found.])
XML_CFLAGS=`$xml_config --cflags 2&/dev/null`
XML_LIBS=`$xml_config --libs 2&/dev/null`
CPPFLAGS="$CPPFLAGS $XML_CFLAGS"
LIBS="$LIBS $XML_LIBS"
注意: 确保把你的configure.in测试放在调用AC_OUTPUT前面。
4.5 在回调函数中如何获得一个控件的指针?
如果有窗口内任一控件的指针,你可以通过调用Glade提供的lookup_widget()函数来获得
窗口内其它控件的指针(在support.c文件中)。
传入参数为窗口内任一控件的指针和想要得到指针的控件名称。通常在信号处理函数中可以
用它的第一个参数做为lookup_widget()函数的第一个参数,例如:
on_button1_clicked
(GtkButton
user_data)
GtkWidget *entry1;
entry1 = lookup_widget (GTK_WIDGET (button), "entry1");
注意如果使用libglade,以上代码将不会起作用。相对应的代码应该是:
on_button1_clicked
(GtkButton
user_data)
GtkWidget* entry1;
xml = glade_get_widget_tree (GTK_WIDGET (button1));
entry1 = glade_xml_get_widget (xml, "entry1");
4.6 如何获得另一个窗口中的控件的指针?
需要跟踪所有上层(toplevel)窗口的指针。对于简单的程序,可以用全局变量来存储
这些指针。
对于大多数复杂的程序可以使用gtk_object_set_data()及相关函数来存储在此窗口中
另一个窗口的指针。例如,如果你想创建一个对话框并希望对主窗口中的控件进行操作,
可以这样做:
dialog = create_dialog1 ();
/* Call the function generated by Glade. */
gtk_object_set_data (GTK_OBJECT (dialog), "main_window", main_window);
当在对话框代码需要对主窗口进行操作时,可以这样做:
main_window = gtk_object_get_data (GTK_OBJECT (dialog), "main_window");
注意: 必须要很小心地确保这个指针有效。如果这个指针所指向的窗口被销毁,确保再
也不使用这个指针,否则你的程序将会崩溃。
4.7 如何获得GtkOptionMenu的值?
调用gtk_menu_get_active()并传入GtkOptionMenu控件的menu做为参数,可以获得当前
所选菜单项。可以用g_list_index()函数查找到它在菜单中的索引号:
on_button1_clicked
(GtkButton
user_data)
GtkWidget *option_menu, *menu, *active_
gint active_
option_menu = lookup_widget (GTK_WIDGET (button), "optionmenu1");
menu = GTK_OPTION_MENU (option_menu)-&
active_item = gtk_menu_get_active (GTK_MENU (menu));
active_index = g_list_index (GTK_MENU_SHELL (menu)-&children, active_item);
g_print ("Active index: %i\n", active_index);
4.8 当GtkOptionMenu值改变时如何调用一个函数?
Glade目前并不支持, 不过你可以手工设置。
创建一个窗口后,获得option menu控件指针,并连接此控件菜单(menu)的"deactivate":
window1 = create_window1 ();
option_menu = lookup_widget (window1, "optionmenu1");
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (option_menu)-&menu),
"deactivate", GTK_SIGNAL_FUNC (on_option_selected),
向callbacks.c中加入一个信号处理. 你可以象上一个问题那样获得所选项的索引号(index):
static void
on_option_selected (GtkMenuShell *menu_shell,
gpointer data)
GtkWidget *active_
gint item_
active_item = gtk_menu_get_active (GTK_MENU (menu_shell));
item_index = g_list_index (menu_shell-&children, active_item);
g_print ("In on_option_selected active: %i\n", item_index);
4.9 如何连接到GtkAdjustment的信号?
Glade目前并不支持,不过你可以象问题3.6(应为4.8)中的一样手工来设置。
创建窗口后,获得包含有adjustment的容器的指针,并连接到
"changed"或"value_changed"信号:
window1 = create_window1 ();
hscale = lookup_widget (window1, "hscale1");
gtk_signal_connect (GTK_OBJECT (GTK_RANGE (hscale)-&adjustment),
"changed", GTK_SIGNAL_FUNC (on_adjustment_changed),
4.10 窗口显示之前如何向其中的GtkCList控件中加入一行?
用Glade生成的'create' 函数创建一个窗口后,可以使用
lookup_widget()函数获得GtkCList控件指针,并按需要加入行,例如:
GtkWidget *window, *
gchar *row[2];
/* Our GtkCList only has 2 columns. */
window = create_window1 ();
clist = lookup_widget (window, "clist1");
row[0] = "Hello";
row[1] = "World";
gtk_clist_append (GTK_CLIST (clist), row);
row[0] = "Second";
row[1] = "Row";
gtk_clist_append (GTK_CLIST (clist), row);
gtk_widget_show (window1);
阅读(947)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_087066',
blogTitle:'glade的使用(借网上的当做笔记)',
blogAbstract:'&
Table of Contents
=================
1. 关于Glade的一般信息
1.1 Glade有哪些文档?
1.2 有没有范例代码?
1.3 Glade生成的C代码必须使用特殊的许可协议吗?
2. 在Glade创建用户界面
2.1 向一个窗口加入一个控件后, 它充满了整个窗口,不能再加入任何其它控件.
2.2 如何更改控件颜色, 比如让一个标签变成红色?
2.3 如何在按钮上增加一幅位图?
2.4 如何一次性加入几个相同的控件?
2.5 使用滚动窗口时出现以下警告信息:',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'讨厌不诚实的人,喜欢老实厚道的人',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}博客访问: 100697
博文数量: 47
博客积分: 1910
博客等级: 上尉
技术积分: 520
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
& Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。&&&&&& &一、Glade简介    如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想。    在Windows环境下,这种可视化的集成开发环境已有许多成熟的产品,如VC++、VB、PB、Delphi、C++Bulider等。基于Linux 操作系统的软件并不丰富,但绝非一片空白,例如Borland公司推出的Kylix。目前Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。    Glade可为你生成界面代码,基本过程如下:    1.让Glade设计出界面元素,设置界面元素属性,为构件的信号设置回调函数;    2.将其存为XML格式,观察并修改不符合要求的部分;    3.编写应用其它部分代码,并在应用中载入Glade文件,编译C代码生成执行文件。    这种模式使设计界面与其它部分代码完全分开,并且有可能做到在对界面进行改动后不必对应用进行编译。图形用户界面设计小组可不必关心应用程序的运行细节,同时编程人员也可以把他们的时间用于其它方面,而不需为界面的修改重复编写大量烦琐的Gtk+函数。这种分工开发的形式符合软件工程的要求,对GUI软件的开发也更方便。    二、使用Glade的预备条件    在学习使用Glade之前,我们假设你已对Linux操作系统的基本运用有初步了解、熟悉rpm包或gzip包的处理命令、对C语言有一定的了解,并熟悉消息处理编程机制。以上基础是使用Glade的必备知识,如果读者在以上某些方面尚存不明之处可先查阅相关资料。为了能更灵活地使用Glade开发应用,用户最好能熟悉gcc编译器,掌握make文件的编写规则。    我们再来看看如何使Glade加入到Linux操作系统的开发环境中,主要分两步:    1.获得Glade的源代码    你可以在大多数Linux操作系统的发布中找到Glade的源代码,也可从网上下载,目前能方便获得源代码的网站是,下载的文件可能是rpm或zip格式。    2.解压、编译并安装Glade    在获得源代码后,对压缩包解压缩,然后再运行make编译Glade。    三、设计界面    在对Glade有了初步的了解之后,让我们来看一看它的真面目吧,在Linux上先运行Xwindow,调出图形化界面后,你可以在虚拟控制台上输入Glade或在命令选单上找到开发子选单下的Glade项,点击即可。    调出Glade后,我们一般能看到三个窗口(如图1):一个工程管理窗口(主窗口)、一个常用构件窗口和一个属性管理窗口。这三个窗口构成了一个GUI的开发环境,对于使用过可视化编程的用户而言,这三个窗口应是很熟悉的。    工程管理窗口主要负责对一个工程项目的管理,我们所说的工程项目就是指所设计的图形界面。这个窗口中使用最多的是它的选单,常用的选单是创建新的工程项目,打开一个已有的项目文件进行编辑修改,以及改变对项目的视角等。    图1    常用构件窗口则是由Glade提供的常用Gtk+构件的图形化集。在需要调用某构件时只需在这个窗口中点击该构件的图标,然后在设计好的位置单击鼠标,这时构件就被安排到适当的位置。    属性窗口主要负责对项目对象的属性调整,它本身是一个分页式的notebook构件,在各页上集中了项目对象(构件)某个方面的属性,如构件的标题名称、尺寸大小、位置、停靠对齐方式、快捷键设置和信号处理等。    值得一提的是有些构件是根构件,或者说是顶层容器构件(如顶层窗口构件,对话框构件等),每一个顶层容器构件都会出现在工程管理窗口的主区内,顶层容器之间是独立的,要使它们能产生连接调度关系还需对由Glade生成的源码进行少量编辑。一个顶层构件的所有子孙构件由Glade维护在一个构件树中,我们可以调用工程管理窗口中的“查看构件树”选单项浏览构件树。    四、生成代码选项    当我们设计出想要的界面后就要让Glade生成我们需要的代码,点击build按钮,Glade会弹出一个选项窗口,这个窗口中有三页,分别是普通选项、C语言选项和libGlade选项(如图2)。    图2    五、Glade生成的文件    Glade 生成的主要目录及代码文件有如下几个:在项目的根目录(假设为/root/projects/project1)下有三个子目录/po、/src和/macros,程序源代码都放在/src目录中,这个目录下的文件可以用文本编辑器再修改以增加应用。    六、运用XML指针建立构件    libGlade在程序运行时才根据XML文档 (.Glade文件)构造构件,为了应用libGlade,我们在程序的开始要对Gnome和libGlade进行初始化。初始程序如下:    /?初始化 gnome ?/    gnome_init("phonebook", VERSION, argc, argv);    /? 初始化libGlade ?/    Glade_gnome_init();    获得一个构件指针的代码如下:    /?声明指针?/    GladeXML    GtkWidget dialog1;    /?在由Glade软件生成的XML界面文件中找到名为“about1”的根构件,生成XML构件并将构件指针赋给 xml ?/    xml = Glade_xml_new("phonebook.Glade", "about1");    dialog = Glade_xml_get_widget(xml, "dialog1");    /?对不用的指针要及时释放?/    gtk_object_unref(GTK_OBJECT(xml));    设计界面时往往有相对独立的构件,在建造应用工程时要在这些构件之间建立联系,如主窗口和对话框的父子关系等,步骤如下:    1.用XML建立两个构件:    dialog = Glade_xml_get_widget(xml, "dialog1");    app= Glade_xml_get_widget(xml, "app1");    2.用gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app))函数将对话框设定为app窗口的从属构件。    注意:在用Glade设计界面时有一点需要注意的是所有的构件名不能重名,因为我们要以它们的名字对该构件进行访问。    七、消息处理函数    对于消息处理函数,我们可以在设计构件时就在构件的属性管理窗口中的signal页指明(如图3),Glade在生成的代码中自动加入函数名。如果用libGlade则有两点限制:    1. 回呼函数接收的参数不能指定类型而只能用空指针类型gpointer(void);    图3    2. 因为libGlade是在运行时才调用回呼函数,所以这类函数不能设为 static型。    八、实例代码    以下是用Glade生成的一个示例程序,它是一个简单的电话薄程序,共有三个用Glade设计的独立构件,一个主窗口、一个录入对话框和一个用于展示录入内容的clist列表构件。    我们可以从主窗口点击按钮弹出对话框,在对话框中有两个录入条,分别用于录入人名和电话号码,当点击对话框中的“确定”之后,人名和电话号码会加入到clist列表中,对话框关闭。有兴趣的读者可以对这个应用程序加以丰富。    #include 〈string.h〉    #include 〈gnome.h〉    #include 〈Glade/Glade.h〉    #define VERSION "1.0"    static GtkWidget ?    static GtkWidget ?    void do_nothing(GtkWidget ?w);    void run_about_dialog(GtkWidget ?w);    void add_number(GtkWidget ?w);    void do_nothing(GtkWidget ?w){    gnome_app_message(GNOME_APP(app), "Doesn't do anything!");    }    void run_about_dialog(GtkWidget ?w){    GladeXML ?    xml = Glade_xml_new("phonebook.Glade", "about1");    if(!xml) {    g_warning("We could not load the interface!");       }    gtk_object_unref(GTK_OBJECT(xml));    }    static void    really_add_number(GtkWidget ?w, int button, gpointer data){    char ?strings[2];    GtkWidget ?name_    GtkWidget ?phone_    GladeXML ?xml =    if (button != 0)       name_entry = Glade_xml_get_widget(xml, "add_name_entry");    phone_entry = Glade_xml_get_widget(xml, "add_phone_entry");    strings[0] = gtk_entry_get_text(GTK_ENTRY(name_entry));    strings[1] = gtk_entry_get_text(GTK_ENTRY(phone_entry));    gtk_clist_append(GTK_CLIST(clist), strings);    }    void add_number(GtkWidget ?w){    GtkWidget ?    GladeXML ?    xml = Glade_xml_new("phonebook.Glade", "dialog1");    if(!xml) {    g_warning("We could not load the interface!");       }    dialog = Glade_xml_get_widget(xml, "dialog1");    gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));    gtk_signal_connect_full(GTK_OBJECT(dialog),"clicked",GTK_SIGNAL_FUNC (really    add_number), NULL, xml,(GtkDestroyNotify)gtk_object_unref,FALSE, FALSE);    }    int main(int argc, char ?argv[]){    GladeXML ?    gnome_init("phonebook", VERSION, argc, argv);    Glade_gnome_init();    xml = Glade_xml_new("phonebook.Glade", "app1");    if(!xml) {    g_warning("We could not load the interface!");    return 1;    }    app=Glade_xml_get_widget(xml,"app1");    clist=Glade_xml_get_widget(xml,"clist1");    Glade_xml_signal_autoconnect(xml);    gtk_object_unref(GTK_OBJECT(xml));    gtk_main();    return 0;    }    对于使用过或熟悉Gtk+的读者来说,这样的代码就是以前我们要花大量时间和精力来编写的。有了这些代码,我们只要稍作修改就能完成所需的应用界面。    九、代码的编译与执行    Glade生成所需的代码后最后一步就是生成可执行文件了。    1.编译代码的条件    系统中必须安装automake 1.4和autoconf 2.13以上版本的两个软件,一般来说操作系统在安装时已将这两个软件安装好了,如要获得这两个软件可以到    redhat/rpms/下载。    2.编译代码的步骤    #〉./autogen.sh    在项目根目录下有一个autogen.sh文件, 它是一个shell脚本文件,运行这个脚本文件就能生成标准的 makefile文件。    #〉make    运行make 命令按makefile进行编译。    (1)#〉make install    运行install使某些资源如图片等安装到程序中,如果没有这一步程序也能运行,但当资源文件的路径有变化时,程序就会因找不到资源文件而出现问题。    (2)已生成的可执行文件放在/src子目录下,在该目录下运行该程序名即可。
阅读(788) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 codeblock 中文 的文章

 

随机推荐