[问题]安装完Feisty后QT程序的字体替换无效了?

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
头像
dngpng
帖子: 25
注册时间: 2005-03-25 23:46
联系:

[问题]安装完Feisty后QT程序的字体替换无效了?

#1

帖子 dngpng » 2007-03-16 7:57

Locale是en_US.UTF-8,以前一直用qtconfig-qt3和qtconfig-qt4通过替换字体来控制中文字体,安装完Feisty后,虽然配置了,但中文字体很难看,有的是个“点”,删除了两个日文字体后,中文又全都变成方框了。

GTK程序一切正常

不知道Feisty中的Qt做了什么变动
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

Re: [问题]安装完Feisty后QT程序的字体替换无效了?

#2

帖子 f0rrest » 2007-03-16 21:05

试一下:

代码: 全选

export LC_CTYPE=zh_CN.UTF-8
dngpng 写了:Locale是en_US.UTF-8,以前一直用qtconfig-qt3和qtconfig-qt4通过替换字体来控制中文字体,安装完Feisty后,虽然配置了,但中文字体很难看,有的是个“点”,删除了两个日文字体后,中文又全都变成方框了。

GTK程序一切正常

不知道Feisty中的Qt做了什么变动
头像
dngpng
帖子: 25
注册时间: 2005-03-25 23:46
联系:

#3

帖子 dngpng » 2007-03-16 22:38

多谢回复,但……貌似没用
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

#4

帖子 f0rrest » 2007-03-16 22:56

你是不是用“Sans Serif”做缺省字体?换成一个具体的英文字体试试?
头像
dngpng
帖子: 25
注册时间: 2005-03-25 23:46
联系:

#5

帖子 dngpng » 2007-03-17 3:06

不,我用的是Luxi Sans
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

#6

帖子 f0rrest » 2007-03-17 5:13

你看在你的~/.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>

另外你看一下这个有没有参考价值:
viewtopic.php?t=43286&highlight=

主要就是这句:“FcDefaultSubstitute(pattern);”
wweeii
帖子: 21
注册时间: 2006-07-29 2:44

#7

帖子 wweeii » 2007-03-17 6:06

问题是假设这样定义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之后才出现的问题,之前好好的
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

#8

帖子 f0rrest » 2007-03-17 17:33

是有这个情况。我看Qt的changelog,所有与字体相关的更改,唯一有影响的就是那句:“FcDefaultSubstitute(pattern);” 我把这个去掉后重新编译libqt3-mt-3.3.8 字体效果就和以前的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
联系:

#9

帖子 dngpng » 2007-03-17 20:03

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里指定一款中文字体为系统字体,这时所有的英文字体也必然是那个中文字体里的英文字形
  • 中文字体名称全部是英文的
LC_CTYPE="zh_CN.UTF-8"
  • 如果定义字体为sans serif,会选择alias里第一个中文字体为系统字体,忽略其它所有英文字体(即使它们在中文字体之前)
  • 部分中文字体名称会变成中文(如“微软雅黑”)
  • 如果指定一款英文字体作系统字体,QT会优先搜索qtconfig里的字体替换规则,找到第一款有效的中文字体,如果qtconfig的规则为空(没有设置),它会在fontconfig里搜索第一个有效的中文字体。
  • 在进行以上两类搜索时,如果该字体名称已变为中文,那么以前设置过的英文名字是无效的。
  • 从qtconfig找出的字体和在fontconfig里配置到的字样渲染效果是有差别的。
不知道为什么QT要做这样的改动,但我觉得完全没有理由根据Locale决定是不是选择中文字体,况且我也不喜欢为了一个字体,而且更改LC_CTYPE,这样的话默认的Monospace会很难看。

郁闷中……

P.S. 不知道你们用不用fcitx,我发现升级到Fesity后,XIM模块会使无论是GTK程序还是QT程序在有输入行为时出现CPU瞬间占用超大的情况,直接的感觉就是“卡”。
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

#10

帖子 f0rrest » 2007-03-19 1:10

这一切的“罪魁祸首”就是qt 3.3.7以后增加的那个patch,就是那个“FcDefaultSubstitute(pattern);”
dngpng 写了: [*]如果定义字体为sans serif,会选择alias里第一个中文字体为系统字体,忽略其它所有英文字体(即使它们在中文字体之前)
应该不是fontconfig里alias的第一个中文字体,而是所有中文字体中,名称按字母排序最靠前的那个。 我暂时没找到解决方法,我现在把Sans Serif 都换成Bitstream Vera Sans 了
dngpng 写了: [*]如果指定一款英文字体作系统字体,QT会优先搜索qtconfig里的字体替换规则,找到第一款有效的中文字体,如果qtconfig的规则为空(没有设置),它会在fontconfig里搜索第一个有效的中文字体。
这个也同上,按字母排序
dngpng 写了: [*]从qtconfig找出的字体和在fontconfig里配置到的字样渲染效果是有差别的。
qt也读所有fontconfig的配置,因为如果fontconfig配置有问题的话,qt还会报错。但他却有自己的选择字体的方法,尤其是对fontconfig配置里定义的assign操作,qt基本不承认。比如我自己定义的,中文斜体用楷体字,中文粗体用黑体字,这在gtk+程序中都正常表现,但qt就不认。
头像
dngpng
帖子: 25
注册时间: 2005-03-25 23:46
联系:

#11

帖子 dngpng » 2007-03-19 8:04

有XFT、Fontconfig这么好的标准化的东西,QT干嘛还老自己瞎鼓捣?这种底层的应用就不用各搞一套了吧?

不知道这算不算个Bug,用不用Report一下。否则只能在这儿这么抱怨了……
头像
bzimage
帖子: 716
注册时间: 2006-03-14 10:25

#12

帖子 bzimage » 2007-03-19 13:30

还是报一下吧,等我用时差不多该有解决办法了:)
头像
dngpng
帖子: 25
注册时间: 2005-03-25 23:46
联系:

#13

帖子 dngpng » 2007-03-20 4:42

这种Bug,是应该报到QT、KDE还是Ubuntu?
f0rrest
帖子: 133
注册时间: 2006-09-27 20:49

#14

帖子 f0rrest » 2007-03-20 6:15

我上面没说清楚,这个patch (FcDefaultSubstitute(pattern);) 是debian/ubuntu引入的,如果用原版qt,至少没有在中文locale下,无法正确选择Sans Serif 字体的问题。 :?
yqh1203
帖子: 108
注册时间: 2005-11-06 16:54

#15

帖子 yqh1203 » 2007-03-20 17:18

f0rrest 写了:我上面没说清楚,这个patch (FcDefaultSubstitute(pattern);) 是debian/ubuntu引入的,如果用原版qt,至少没有在中文locale下,无法正确选择Sans Serif 字体的问题。 :?
archlinux里也是这样。马的,烦死了。qt3.3.7就没有问题。qt老是搞些莫名其妙的东西。
回复