做了个工具条,每次点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.\n"));
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

GtkImageMenuItem的更多相关文章

随机推荐

  1. Why isn't sizeof for a struct equal to the sum of sizeof of each member?

    check here. Basically the compiler will insert unused memory into a structure so that data members a ...

  2. js判断当前时间前几天和格式校验

    addday天后的日期 function time(addday) { var now= new Date(); nowdate=now.getDate(); //alert(nowdate); no ...

  3. Log4j 简介及初步应用

    使用2.5版本有问题,暂时没有解决,也许是JDK版本不兼容的原因.因此使用的是log4j-1.2.8.jar 1.三个组件 日志记录器  ——  Logger.输出目的地 —— Appender.输出 ...

  4. CodeForces 719A Vitya in the Countryside 思维题

    题目大意:月亮从0到15,15下面是0.循环往复.给出n个数字,如果下一个数字大于第n个数字输出UP,小于输出DOWN,无法确定输出-1. 题目思路:给出0则一定是UP,给出15一定是DOWN,给出其 ...

  5. word2010无法打开文件时的一点对策

    word2010无法打开文件时的一点对策 1. Word 安全模式启动,点击「开始」,在搜索栏中输入winword /safe并回车,测试问题是否依然存在? 2. 正常启动Word,点击“文件”—“选 ...

  6. SSL交互过程

    SSL交互过程 HTTPS将HTTP和SSL结合,即加了SSL隧道封装的HTTP,通过SSL对客户端身份和服务器进行验证,对传输的数据进行加密.不同情况下SSL的协商过程存在差异,本节以只验证服务器为 ...

  7. USACO Section 1.4 Arithmetic Progressions 解题报告

    题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...

  8. bat脚本:自动压缩n天前的文件【转载】

    原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html     磁盘 ...

  9. FileReader和BufferedReader的区别

    1.FileReader不能一行行读 FileReader fr = null; try { fr = new FileReader(new File(path)); StringBuffer str ...

  10. JSP直接调用一个action定向到页面

    方法:写function <script type="text/javascript"> function mainPas(){ window.location.hre ...