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.\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的更多相关文章
随机推荐
- 小Q系列故事——电梯里的爱情
小Q系列故事——电梯里的爱情 Time Limit : 300/100ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...
- Masonry使用详解
mas_makeConstraints 只负责新增约束 Autolayout不能同时存在两条针对于同一对象的约束 否则会报错 mas_updateConstraints 针对上面的情况 会更新在blo ...
- PHP中字符串转换为数值 可能会遇到的坑
今天看到一个老外最喜欢的一段代码 <?php $string = 'zero'; $zero = 0; echo ($string == $zero) ? 'Why? Just why?!' : ...
- php5.6之后的版本使用curl以@+文件名的方式上传文件无效的解决版本
使用curl上传文件使用file=@文件路径的方式,在php5.6以后的版本中无法使用了 官方文档给出明确解释 如果需要支持的话,可以将CURLOPT_SAFE_UPLOAD设置为false 或者使用 ...
- Linux查询系统配置常用命令
系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo ...
- java问题诊断
http://techblog.youdao.com/?p=961 http://linuxtools-rst.readthedocs.org/zh_CN/latest/advance/03_opti ...
- switch case多值匹配
switch case多值匹配一般有两种情况 1.列举(将所有值列举出来) var n= 3;switch (n){ case 1: case 2: case 3: ...
- eclipse 终极操作技巧
eclipse作为一个java开发必备软件,从用户体验来说,还是蛮一般的(按照初始设置的话),所以有必要进行一些设置上的改良,加上对一些好用的快捷键的挖掘,能让你用eclipse更加得心应手,事半功倍 ...
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...
- 什么是dtd文件,为什么需要
DTD为英文Document Type Definition,中文意思为“文档类定义”.DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许你会问它们居然有这样 ...