Linux 下 gtkmm + glade 开发
Linux下大多数软件都是将core和UI完全分离,很多程序原作者只提供了CLI接口,而图形化接口则由另一些人完成。这种做法不仅减小了开发难度,缩短了开发周期,松散的耦合使程序更容易移植。这和很多windows程序形成了鲜明对比,尤其是MFC的程序,core代码和UI代码杂糅到doc/view的框架里,完全没有可移植性。
这学期写大作业想做个GUI,就顺便看了下MFC,觉得MFC现在的现在的地位十分尴尬,大型项目几乎清一色SDK,小型应用则是.net的天下,MFC被用的最多的莫过于CString了。一个Application Framwork已经退化成一个单纯的Class Library了。
暑假前的小学期,又有一个不大不小的作业,决定完全在Linux编写,并且Core和UI完全分离,有时间的话想用GTK做GUI。直接用C代码设计一个稍微复杂点GTK界面简直就是自找苦吃,于是上glade。
随便用Glade托了一个窗口拿来测试(用的是GtkBuilder而不是libglade,因为后者不支持很多gtk特性),保存成.glade文件,实际上就是一个xml文件。由于作业是用C++写的,所以想用gtk的C++ bindings gtkmm来,想让整个代码看起来比较统一。于是开始Google。很不幸的找到了一个错误的例子,导致XML文件总是导入不完全。后来找到了gtkmm的文档,发现里面竟然有很多源码例子,找到一个GtkBuilder的例子,改了下,程序就跑起来了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <gtkmm.h> #include <iostream> Gtk::Window* pWindow = 0; int main (int argc, char **argv) { Gtk::Main kit(argc, argv); //Load the GtkBuilder file and instantiate its widgets: Glib::RefPtr refBuilder = Gtk::Builder::create(); try { //导入Glade生成的xml文件 refBuilder->add_from_file("mygui.glade"); } catch(const Glib::FileError & ex) { std::cerr << "FileError: " << ex.what() << std::endl; return 1; } catch(const Gtk::BuilderError & ex) { std::cerr << "BuilderError: " << ex.what() << std::endl; return 1; } //Get the GtkBuilder-instantiated Window: refBuilder->get_widget("window", pWindow); if(pWindow) { kit.run(*pWindow); } delete pWindow; return 0; } |

用G++编译
g++ phone.cpp `pkg-config --cflags --libs gtkmm-2.4`
后面几天主要还是些写核心代码和CLI,主要任务完成了再来接着折腾gtk~~~







好博~
通信跟计科仿佛两个世界
@jiayi
我觉得还是通信比较难学~~^ ^
@Jackal
能折腾的才有意思……
我的链接还木加上啊
Jackal 回复:
七月 8th, 2009 at 12:30 下午
….无语了,这条评论被akismet block到垃圾评论里了,今天才看见…Sorry~
PS:链接已经加上