• GtkImageMenuItem


    做了个工具条,每次点arrow出来的菜单都没图标,郁闷;查来查去,看源码,看css,最后知道GtkAction缺省就是对应GtkImageMenuItem,再一试,跟toolbar无关,换menu也不显示图,查css设置看各种主题也没找到不显示图的规则;去切换主题的高级设置一看,靠,原来这里指定了不显示菜单图标。

    /usr/share/themes/Adwaita#

    http://superuser.com/questions/656595/how-do-i-install-themes-for-gnome3-in-debian-7

    http://worldofgnome.org/making-gtk3-themes-part-4-porting-gtk2-themes/

    对gtkApplication的功用一致不甚了解,

    http://blog.m8t.in/2013/03/moving-from-unique-to-gtkapplication.html

    GTK+ 3 在紧锣密鼓的开发之中,虽然说 3.0 版本相对于 GTK+ 2 在编程方面的改变并不大,不过仍然有些改变是和 GTK+ 使用者密切相关的,比如新加入的 GtkApplication 类。

    大家知道开始学习 GTK+ 的一个难点就是莫名其妙的 gtk_init()、gtk_main(),以及 quit、destroy 等信号的区别之类的,简单来说,一个 Hello World 程序的构建过程很让人困惑,感觉就像记住了一个模板,每次都要写一次。

    GTK+ 3 为了解决这个问题,抽象出了 GtkApplication 这个类,那么一切都变得容易理解起来:gtk_init() 就是 GtkApplication 的构造函数,现在只需要调用 gtk_application_new() 就可以,gtk_main() 现在变成了 gtk_application_run(),意义很明显,而程序的退出也只需要连接 GtkApplication 类的 quit 信号即可。

    GtkApplication 默认自带一个 GtkWindow,可以通过 gtk_application_get_window() 获得,因此一个新的 Hello World 看起来可能是这样:

    #include <gtk/gtk.h>
    int main (int argc, char **argv)
    {
      GtkApplication *app;
      GtkWindow *window;app = gtk_application_new ("org.gtk.Example", &argc, &argv);
      window = gtk_application_get_window (app);
      gtk_container_add (GTK_CONTAINER (window), gtk_label_new ("Hello world"));
      gtk_widget_show_all (GTK_WIDGET (window));
      gtk_application_run (app);
      return 0;
    }

    怎么样,是不是简单明了得多?

    http://www.kissuki.com/blog/2009/01/06/linux-i18n/

    对于国际化程序的编写,终端程序和图形界面程序是不同的,但是后期的翻译步骤是一致的。

    终端程序只有gettext函数,可以通过预编译(#define)来简化,而glib中的gi18n.h提供了 _() 宏,比较方便。把所有文本放在 _() 中间即可。

    下面编写两个示例来说明。

    终端程序:

    #include <stdio.h>
    #include <libintl.h>
    #include <locale.h>
    #define _(STRING) gettext(STRING)
    int main () {
        setlocale (LC_ALL, "");
        bindtextdomain ("test", "./locale/");
        textdomain ("test");
        printf (_("This is English.
    "));
        return 0;
    }

    GTK+程序:

    #include <glib/gi18n.h>
    #include <gtk/gtk.h>
    #include <stdio.h>
    
    #define GETTEXT_PACKAGE "ubuntu-tweak"
    #define LOCALEDIR "./locale"
    
    int main(int argc,char **argv)
    {
        GtkWidget *window;
        gtk_init (&argc, &argv);
        bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
        textdomain (GETTEXT_PACKAGE);
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW(window), _("help"));
        g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
        gtk_widget_show (window);
        gtk_main ();
        return 0;
    }

    二、生成po文件

    $ xgettext -k_ -o lang.po ./*.c

    三、编辑po文件

    将头部的CHARSET改为“UTF–8”,在msgstr后加入翻译。

    四、生成mo文件

    $ msgfmt -o test.mo lang.po

    注意test是你程序中的GETTEXT_PACKAGE名字。

    五、移动mo文件

    先建立 locale/zh_CN/LC_MASSAGES/ 这个文件夹,然后把mo文件移动过去,注意locale是你程序中的LOCALEDIR。

    六、运行程序

    呵呵,看看效果吧,在不同的locale下(可修改$LANG),运行的程序效果不同哦~

    源码下载

    http://www.gtkforums.com/viewtopic.php?t=3137

    多个window

     http://ptomato.name/advanced-gtk-techniques/html/index.html

    http://ptomato.name/advanced-gtk-techniques/html/custom-container.html

  • 相关阅读:
    带你去草原
    为爱痴狂
    打造值得信任的个人品牌究竟靠什么?
    【缅怀妈妈系列诗歌】之二十二:没妈的孩子像根草
    缅怀妈妈系列诗歌】之二十三:妈妈,我学会了坚强
    要创业?想自己当老板?先学会老板法则三十六计
    【缅怀妈妈系列诗歌】之二十一:妈妈,没有了您,就没有了家
    sql server text类型替换
    网页中插入天气预报
    超出了存储过程、函数、触发器或视图的最大嵌套层数最大层数为 32
  • 原文地址:https://www.cnblogs.com/jvava/p/4176746.html
Copyright © 2020-2023  润新知