求助,Linux下的LVM管理有GUI界面的工具么
2个回答
展开全部
*使用GTK+和Glade快速开发Linux图形界面 **GTK+简介 ***基本概念 GTK+是一种用于创建图形界面的库.嗯,gnome用的就是它,不过并不是说只 有在gnome环境中才能用,只要系统上装有GTK的库(基本上有图形系统的个 人机都会有的啦)就能运行基于GTK的程序.除了UNIX-like平台,它还移植 到windows上,还有面向嵌入设备的framebuffer版本等等. GTK依赖两个重要的库.一个是GLib,这并不是一个图形库,也和glibc不同 ,它大抵上提供了一些接口以屏蔽系统的不同,比如gint在哪里都是32bit 的,等等;另一个是GDK,它是一个设备无关的图形库,支持基本的画点,以及 与窗口管理器沟通等任务,由于GTK被设计成能在各个平台,而非仅仅在 XWindow环境下使用,所以这个库也是必要的.而在他们上面的GTK库,就提 供了一些widget---可以理解为控件啦,不过窗口也是一个widget的说,给 我们使用,并提供了包装良好的事件响应机制. ***GTK+开发基础 要开发基于GTK的软件,必须先安装GTK+的开发包.检查是否正确安装的 法是在安装后执行``pkg-config--cflags--libsgtk+-2.0'',如果安装不正 确,会提示找不到相应的包. GTK本身是基于C的库,当然也有C++等语言的wrap,但它的整个体系是面 向对象的.其最基本的类是GObject,GtkObject继承了它,GtkObject又派生 出我们最经常用到的GtkWidget,我们使用的所有窗体控件都派生于它.于是, 在C环境中我们就要手动处理这些类转换,GTK和底层的GLib等提供了一种 统一的转换方法,比如把类型为GtkWidget*的button转换成GtkButton形, 写法是:GTK_BUTTON(button),就酱子. 我不打算在这里列一个GTK的helloworld占页面,这个程序随便google一 下就能找到.我们可以自己想一想一个图形界面应该如何建立. 首先我们要进行初始化,GTK提供了gtk_init()作为初始化,它检查程序参数 中的一些特定部分,进行自己的设置.调用方法如下: gtk_init(&argc,&argv); 将argc和argv传指针的目的是gtk_init会对他们进行加工,把GTK自己 用到的一些参数抽取出来. 接着,我们必须要创建这些控件吧,GTK中,创建一个控件会返回一个 GtkWidget类型(或它的派生类)的指针,所有创建控件的函数的格式是 gtk_控件类型_new(参数表).比如创建一个窗口的写法是: GtkWidget*window=gtk_window_new(GTK_WINDOW_TOPLEVEL); 然后,我们要设定事件响应函数,GTK中的事件叫做signal.GTK的事件响应 函数接口应该是类似这样的 void destroy(GtkWidget*widget,gpointerdata) 我们把它连入到一个控件中的方法是这样的 g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL); 应该很好理解吧. 我们创建的咚咚,要说明他们的位置和包含关系,GTK用container来解决这 个问题,它可以保证在窗口缩放的时候控件的摆放依然合理,container的具体 使用不详细说,后面经常要跟container打交道,但基本上不用管C代码,嗯 .不过其实我们的任何的可视控件都继承自container,比如button也是一个 container,它很多时候装的是一个GtkLabel,也就是用来显示纯文本的控件, 于是我们就能见到一个文本按钮,嗯.使用container的方法如下. gtk_container_add(GTK_CONTAINER(window),button); 这样button就会占满整个window的控件,我们后面可以看到可以用 GtkVBox,GtkHBox等container分隔窗体. 好了,我们可以准备启动程序了,我们可以用gtk_widget_show()来显示各个 控件,然后我们就应该进入到所谓的事件响应循环了,这就要使用gtk_main(). 在程序运行过程中,我们要操纵控件,比如说我们要在一个entry控件(文本框 )中取出其中的文字,这样的操作使用gtk_控件类型_动作(对象,参数)的形 式完成的,比如刚才所说的任务,做法是gtk_entry_get_text(entry). 顺便讲讲GTK程序的退出,关闭GTK的窗口(即使是所有窗口)也不代表程序 退出,因为那说到底只是一个界面而已,我们当然可以使用exit()的自爆法退 出,但最好还是给GTK一个料理后事的机会,在主窗口的destroy事件响应函 数上用gtk_main_quit()就好了. 编译GTK程序的法也很简单. gcc-ofoofoo.c`pkg-config--cflags--libsgtk+-2.0` **使用Glade快速定制用户界面 好了,说了一堆有的没的,如果我现在说我上面说的那一堆中的大部分我们都不 会用到,是不是觉得偶很歉扁?前面的介绍只是给大家GTK这个库的一些基本 概念,概念就好了,我们倒真的不用拿这些来编程的.想想,一个复杂一点的界 面,十几个控件,再加上各种各样的container,自己挂事件,再加上超常的命 名,想想都恐怖. 这时候,Glade横空出世了!这是一个可视化的界面编辑器---但它仅仅是一 个界面编辑器而已,甚至连代码编辑框也没有给出.先不管了,打开glade(安 装省略,饶了我把,记得装libglade-dev),应该很好懂了,指指点点就能弄好 一个界面,然后在属性窗的信号一栏中选取需要的信号,设定响应函数,非常好 弄. 玩了几分钟,问题来了,怎么把它变为程序啊?提供类似功能的IDE如 BorlandC++Builder,在点击创建新控件的时候,我们能即使在代码窗看到自 动生成的代码,Glade也可以采用这种形式,在设计好界面并保存后,按一下主 窗口的build按钮,它就自动生成了界面代码,根本不用自己写的.打开代码 目录,callbacks.c里已经有自动创建的事件响应的空函数,在里面填处理,然 后configuremake就行了. 但是,这样的开发方式还是有问题的.第一,自动生成的代码非常复杂,可是很 多时候我们还是不能完全不看它,处理和界面是混在一起了,理解他们变得困难 ;其二,由于以上的原因,修改界面变得非常痛苦;其三,它给你生成那堆有的 没的配置文件不一定是你想要的. 因此glade提供了另一种方法,glade编辑所得的.glade文件是一个XML文 件,其实它已经完整地描述了界面,我们能否采用一种简单的方式直接载入,配 置它呢.这样做,我们的代码中就真真正正地去处了烦人的界面生成代码,而专 注于处理部分了. libglade正是由于这个而来,它能很好地完成上面所说的工作.当我们用 glade创建了一个.glade界面后,用这种方法我们就可以建立界面,运行程序 了. #include #include GladeXML*GUI; int main(intargc,char**argv) { gtk_init(&argc,&argv); /*loadtheinterface*/ GUI=glade_xml_new("frame.glade",NULL,NULL); /*connectthesignalsintheinterface*/ glade_xml_signal_autoconnect(GUI); /*starttheeventloop*/ gtk_main(); return0; } 剩下的事情很简单,如果你的button的clicked控件有一个响应函数 on_button_clicked,你写 void on_button_clicked(GtkWidget*widget,gpointerdata) { //balabalabala } 就可以了.所以,上面讲的一堆创建界面的方法,其实大部分时候都用不着. 由于用到了libglade,我们的编译方法变为 gcc-ofoofoo.c`pkg-config--cflags--libslibglade-2.0` **开发举例 一个很简单的程序,密码学对称加密算法要用到的,如果说是界面,就是三个文 本框:明文,密码,密文,三个按钮,加密,解密,清除,完了.为了实验众多 的算法,我们加了一个下拉窗口,用来选择算法.我把它设计成一个wrapper 和框架,它不实现任何算法,只是在界面中获取用户输入,调用外部程序,并把 结果显示出来而已.这样,实际的算法实现可以用纯C写的文本界面程序完成, 移植起来很方便,在windows随便做个一样的界面做前端就整个移植过去了. 于是,我们需要的窗体元素是GtkEntry,GtkComboBoxEntry,GtkButton,查查 手册,我们用到的界面相关的函数只有以下几个: -gtk_entry_get_text(),用于获取文本框输入 -gtk_entry_set_text(),用于在文本框中显示结果 -gtk_combo_box_get_active_text(),用于在ComboBoxEntry(派生自 ComboBox)取出用户选中的算法. 另一个问题是,他们都需要相应的对象指针做参数,这应该怎样获得呢?我们使 用glade_xml_get_widget(GUI,"控件名")就能取得控件了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询