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的例子,改了下,程序就跑起来了

#include 
#include 

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;
}

Glade-gtkmm

用G++编译

g++ phone.cpp `pkg-config --cflags --libs gtkmm-2.4`

后面几天主要还是些写核心代码和CLI,主要任务完成了再来接着折腾gtk~~~

This entry was posted in 技术学习 and tagged . Bookmark the permalink.

4 Responses to Linux 下 gtkmm + glade 开发

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据