[问题]安装完Feisty后QT程序的字体替换无效了?
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
- dngpng
- 帖子: 25
- 注册时间: 2005-03-25 23:46
- 联系:
[问题]安装完Feisty后QT程序的字体替换无效了?
Locale是en_US.UTF-8,以前一直用qtconfig-qt3和qtconfig-qt4通过替换字体来控制中文字体,安装完Feisty后,虽然配置了,但中文字体很难看,有的是个“点”,删除了两个日文字体后,中文又全都变成方框了。
GTK程序一切正常
不知道Feisty中的Qt做了什么变动
GTK程序一切正常
不知道Feisty中的Qt做了什么变动
-
- 帖子: 133
- 注册时间: 2006-09-27 20:49
Re: [问题]安装完Feisty后QT程序的字体替换无效了?
试一下:
代码: 全选
export LC_CTYPE=zh_CN.UTF-8
dngpng 写了:Locale是en_US.UTF-8,以前一直用qtconfig-qt3和qtconfig-qt4通过替换字体来控制中文字体,安装完Feisty后,虽然配置了,但中文字体很难看,有的是个“点”,删除了两个日文字体后,中文又全都变成方框了。
GTK程序一切正常
不知道Feisty中的Qt做了什么变动
-
- 帖子: 133
- 注册时间: 2006-09-27 20:49
你看在你的~/.fonts.conf里加上下面的试试:
另外你看一下这个有没有参考价值:
viewtopic.php?t=43286&highlight=
主要就是这句:“FcDefaultSubstitute(pattern);”
代码: 全选
<match target="pattern">
<test name="family" >
<string>WenQuanYi Bitmap Song</string> <!--这里用你系统的汉字替代-->
</test>
<edit name="family" mode="prepend" binding="strong">
<string>Luxi Sans</string>
</edit>
</match>
另外你看一下这个有没有参考价值:
viewtopic.php?t=43286&highlight=
主要就是这句:“FcDefaultSubstitute(pattern);”
-
- 帖子: 21
- 注册时间: 2006-07-29 2:44
问题是假设这样定义sans-serif
<alias>
<family>sans-serif</family>
<prefer>
<family>Segoe UI</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>Microsoft YaHei</family>
<family>Meiryo</family>
<family>WenQuanYi Bitmap Song</family>
</prefer>
</alias>
指定qt程序用sans serif以后,挑英文字体没问题,会用到Segoe UI
但是qt会无视Segoe UI以下的内容,遇到Segoe UI没法表示的字体qt无视指定的bitstream,yahei等等,而自己8知道从哪里选个字体来用
前两个星期某次upgrade之后才出现的问题,之前好好的
<alias>
<family>sans-serif</family>
<prefer>
<family>Segoe UI</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>Microsoft YaHei</family>
<family>Meiryo</family>
<family>WenQuanYi Bitmap Song</family>
</prefer>
</alias>
指定qt程序用sans serif以后,挑英文字体没问题,会用到Segoe UI
但是qt会无视Segoe UI以下的内容,遇到Segoe UI没法表示的字体qt无视指定的bitstream,yahei等等,而自己8知道从哪里选个字体来用
前两个星期某次upgrade之后才出现的问题,之前好好的
-
- 帖子: 133
- 注册时间: 2006-09-27 20:49
是有这个情况。我看Qt的changelog,所有与字体相关的更改,唯一有影响的就是那句:“FcDefaultSubstitute(pattern);” 我把这个去掉后重新编译libqt3-mt-3.3.8 字体效果就和以前的Qt一样了。
经过几次比较发现,在“纯”英文locale下(如LANG=en_US.UTF-8),Qt无法将英文字体与中文字体配合使用,即使在fontconfig里设置了alias,并且qtconfig里也设置了字体替换,Qt都将无视。
经过几次比较发现,在“纯”英文locale下(如LANG=en_US.UTF-8),Qt无法将英文字体与中文字体配合使用,即使在fontconfig里设置了alias,并且qtconfig里也设置了字体替换,Qt都将无视。
wweeii 写了:问题是假设这样定义sans-serif
<alias>
<family>sans-serif</family>
<prefer>
<family>Segoe UI</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>Microsoft YaHei</family>
<family>Meiryo</family>
<family>WenQuanYi Bitmap Song</family>
</prefer>
</alias>
指定qt程序用sans serif以后,挑英文字体没问题,会用到Segoe UI
但是qt会无视Segoe UI以下的内容,遇到Segoe UI没法表示的字体qt无视指定的bitstream,yahei等等,而自己8知道从哪里选个字体来用
前两个星期某次upgrade之后才出现的问题,之前好好的
- dngpng
- 帖子: 25
- 注册时间: 2005-03-25 23:46
- 联系:
这个我试过了,没用f0rrest 写了:你看在你的~/.fonts.conf里加上下面的试试:代码: 全选
<match target="pattern"> <test name="family" > <string>WenQuanYi Bitmap Song</string> <!--这里用你系统的汉字替代--> </test> <edit name="family" mode="prepend" binding="strong"> <string>Luxi Sans</string> </edit> </match>
另处,我犯了个错误,就是上次改成zh_CN.UTF-8的locale时其实系统没安中文的locale所以不起作用。但我不知道现在还有没有不安那一堆中文语言包而给系统装上中文locale的办法,记得以前只要dpkg-reconfigure locales就行,可是现在不行了。
装上中文包,把LC_CTYPE改成zh_CN.UTF-8后和LC_CTYPE是en_US.UTF-8的时候对比了一下qt程序, 发现这么几个结论:
LC_CTYPE="en_US.UTF-8"
- QT程序不会选择任何中文字体,即使中文字体排在fontconifg的alias的第一个(比Luxi Sans还靠前),除非在kcontrol里指定一款中文字体为系统字体,这时所有的英文字体也必然是那个中文字体里的英文字形
- 中文字体名称全部是英文的
- 如果定义字体为sans serif,会选择alias里第一个中文字体为系统字体,忽略其它所有英文字体(即使它们在中文字体之前)
- 部分中文字体名称会变成中文(如“微软雅黑”)
- 如果指定一款英文字体作系统字体,QT会优先搜索qtconfig里的字体替换规则,找到第一款有效的中文字体,如果qtconfig的规则为空(没有设置),它会在fontconfig里搜索第一个有效的中文字体。
- 在进行以上两类搜索时,如果该字体名称已变为中文,那么以前设置过的英文名字是无效的。
- 从qtconfig找出的字体和在fontconfig里配置到的字样渲染效果是有差别的。
郁闷中……
P.S. 不知道你们用不用fcitx,我发现升级到Fesity后,XIM模块会使无论是GTK程序还是QT程序在有输入行为时出现CPU瞬间占用超大的情况,直接的感觉就是“卡”。
-
- 帖子: 133
- 注册时间: 2006-09-27 20:49
这一切的“罪魁祸首”就是qt 3.3.7以后增加的那个patch,就是那个“FcDefaultSubstitute(pattern);”
应该不是fontconfig里alias的第一个中文字体,而是所有中文字体中,名称按字母排序最靠前的那个。 我暂时没找到解决方法,我现在把Sans Serif 都换成Bitstream Vera Sans 了dngpng 写了: [*]如果定义字体为sans serif,会选择alias里第一个中文字体为系统字体,忽略其它所有英文字体(即使它们在中文字体之前)
这个也同上,按字母排序dngpng 写了: [*]如果指定一款英文字体作系统字体,QT会优先搜索qtconfig里的字体替换规则,找到第一款有效的中文字体,如果qtconfig的规则为空(没有设置),它会在fontconfig里搜索第一个有效的中文字体。
qt也读所有fontconfig的配置,因为如果fontconfig配置有问题的话,qt还会报错。但他却有自己的选择字体的方法,尤其是对fontconfig配置里定义的assign操作,qt基本不承认。比如我自己定义的,中文斜体用楷体字,中文粗体用黑体字,这在gtk+程序中都正常表现,但qt就不认。dngpng 写了: [*]从qtconfig找出的字体和在fontconfig里配置到的字样渲染效果是有差别的。
- dngpng
- 帖子: 25
- 注册时间: 2005-03-25 23:46
- 联系:
-
- 帖子: 133
- 注册时间: 2006-09-27 20:49