• 订阅

    抓虾
    google reader
    bloglines
    鲜果
  • 分类目录

  • 功能

  • 标签

    不折腾 价值 健身 回忆 小说 幼稚的思想 影评 感想 推倒 朝花夕拾 犯罪 理想生活 生活 电影评论 看电影 看病 社会 社会事件 笔记本 网络 言论自由 过年 随想 黑客 黑客小说 AV女优 blog BotCalk cult festival Fvwm gloobus GMChess gmitter GMLive gtkmm iCalk iTalk M8 ppstream program soft talkmm twitter vim
  • gtkmm文章:libglade转换至gtkbuilder

    星期二, 八月 11th, 2009

    glade3界面生成器现在能生成两种格式的xml界面描述文件。分别是libglade和gtkbuilder. libglade就是我们以前所使用的,要依赖于libglade库的。而gtkbuilder是gtk 2.12以后版本直接支持的。gtkbuilder是设计来代替libglade的,将会是以后的主流。因此本文将简单介绍一下在gtkmm环境下libglade转换至gtkbuilder的操作。
    1.转换旧的glade文件。
    如果您的项目中已经用了libglade的文件格式,可通过两种方法将它转换成gtkbuilder格式的。
    一是用glade-3打开,在菜单“属性”中将它选择成gtkbuilder,并另存为即可。
    二是使用 gtk-builder-convert xxx.glade xxx.xml 命令直接转换。
    当然gtkbuilder的后缀名仍可保留为glade,这随你喜欢。
    2. 替换代码中的相应函数。
    在创建xml文件中:

    Glib::RefPtr<Gnome::Glade::Xml> main_xml = Gnome::Glade::create(main_ui,"main_notebook");

    替换成

    Glib::RefPtr<Gtk::Builder> main_xml = Gtk::Builder::create_from_file(main_ui, "main_notebook");

    在获取widget中

    Gtk::Button* button_ok = dynamic_cast<Gtk::Button*>(main_xml->get_widget("button_ok"));

    替换成

    Gtk::Button* button_ok=0;
    main_xml->get_widget("button_ok",button_ok);

    转换后,程序可以去除掉libglademm和libglade依赖,但至少要求gtk和gtkmm版本要2.14以上版本才能正常工作。另外libglade里画的菜单和工具栏似乎不能正常转到gtkbuilder中,这点需要注意。

    gtkmm关闭窗口续

    星期四, 三月 26th, 2009

    上一篇文章中讲到的窗口,点击关闭后只是隐藏了而已。窗口会一直存在。也许会觉得这样占用资源。当然也可以让它点击关闭即销毁它。只需要在run调用后detele掉它。但注意还需要把窗口指针置0
    代码如下修改

    about->run();
    //about->hide();
    delete about;
    about=0;

    Gtkmm中关于窗口的关闭按钮问题

    星期三, 三月 25th, 2009

    之前用Gtkmm写icalk时创造了一个关于窗口,但它有个bug,关闭按钮没响应。昨天为GMChess创建关于窗口的时候再次遇到这个bug,这次我认真地搜索了一下,终于发现问题所在。
    之前我都是创建完about窗口后,再调用show函数显示。
    其实是应该调用run函数。我忘记了about窗口其实是dialog类,平时对话框之类不是要调用run然后观其返回值嘛,原来我无形中把about窗口当成window类了。发现有不少人有这错觉哩。而gnome-osd-properties的关于窗口也有关不掉的bug,哈哈哈。
    下面给一个菜单调用about窗口的实例源码,

    void MainWindow::on_menu_about()
    {
    static Gtk::AboutDialog* about(0);
    if(about == 0){
    std::vector<Glib::ustring> authors;
    authors.push_back("lerosua ");
    authors.push_back("wind");
    about = new Gtk::AboutDialog ;
    Glib::RefPtr<Gdk::Pixbuf> logo = Gdk::Pixbuf::create_from_file(DATA_DIR"/gmchess.png");
    about->set_logo(logo);
    about->set_program_name("GMChess");
    about->set_version(version);
    about->set_website("http://lerosua.org");
    about->set_copyright("Copyright (c) 2009 lerosua");
    about->set_comments(_("GMChess is chinese chess game write by gtkmm"));
    about->set_authors(authors);
    about->set_license (_("This program is licenced under GNU General Public Licence (GPL) version 2."));
    about->set_translator_credits("lerosua");
     
     
    }
    //about->show();
    //about->raise();
    about->run();
    about->hide();
     
    }