LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2006|回复: 7

[Report] Qt 3.3.8-3 解决字体问题

[复制链接]
发表于 2007-4-7 00:54:48 | 显示全部楼层 |阅读模式
从Qt 3.3.7开始Qt就存在字体问题, 比较明显的表现是qterm(一个telnet bbs的工具)中, 对字体无法控制. 在经历了很多个版本后, Qt 3.3.8-3终于解决了这个问题.

从官方网站上看, 此次更新新增了一个针对字体问题的补丁.

推荐遇到字体问题的朋友升级.
发表于 2007-4-7 01:25:40 | 显示全部楼层
哈哈。。。赞赞。非常赞。虽然以前我用删除的字体的方法暂时解决。
回复 支持 反对

使用道具 举报

发表于 2007-4-7 03:36:19 | 显示全部楼层
貌似没有遇到过这个问题
回复 支持 反对

使用道具 举报

发表于 2007-4-7 17:08:37 | 显示全部楼层
楼主能否把那个补丁贴上来,ubuntu也有类似问题,我想看看arch是怎么解决的。多谢!


Post by leemars
从Qt 3.3.7开始Qt就存在字体问题, 比较明显的表现是qterm(一个telnet bbs的工具)中, 对字体无法控制. 在经历了很多个版本后, Qt 3.3.8-3终于解决了这个问题.

从官方网站上看, 此次更新新增了一个针对字体问题的补丁.

推荐遇到字体问题的朋友升级.
回复 支持 反对

使用道具 举报

发表于 2007-4-7 19:29:37 | 显示全部楼层
cat qt-font-default-subst.diff  应该是这个
[PHP]
--- src/kernel/qfontdatabase_x11.cpp
+++ src/kernel/qfontdatabase_x11.cpp
@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s
            if (script == QFont:atin)
                // add Euro character
                FcCharSetAddChar(cs, 0x20ac);
-            if (script == QFont::Han_SimplifiedChinese)
-                FcCharSetAddChar(cs, 0x3400);
-            if (script == QFont::Han_TraditionalChinese){
-                FcCharSetAddChar(cs, 0x3435);
-                FcCharSetAddChar(cs, 0xE000);
-                FcCharSetAddChar(cs, 0xF6B1);
-            }
-            if (script == QFont::MiscellaneousSymbols)
-                FcCharSetAddChar(cs, 0x2714);
            FcPatternAddCharSet(pattern, FC_CHARSET, cs);
            FcCharSetDestroy(cs);
        }
@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c
     FcPatternPrint(pattern);
#endif

+    // XftFontMatch calls the right ConfigSubstitute variants, but as we use
+    // FcFontMatch/Sort here we have to do it manually.
     FcConfigSubstitute(0, pattern, FcMatchPattern);
+    XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern);
+
//     qDebug("1: pattern contains:");
//     FcPatternPrint(pattern);

@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c
            value.u.s = (const FcChar8 *)cs.data();
            FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue);
        }
-#ifdef FONT_MATCH_DEBUG
-        printf("final pattern contains:\n");
-        FcPatternPrint(pattern);
-#endif
     }

     if (script != QFont::Unicode) {
@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c
         if (script == QFont:atin)
             // add Euro character
             FcCharSetAddChar(cs, 0x20ac);
-        if (script == QFont::Han_SimplifiedChinese)
-            FcCharSetAddChar(cs, 0x3400);
-        if (script == QFont::Han_TraditionalChinese) {
-            FcCharSetAddChar(cs, 0x3435);
-            FcCharSetAddChar(cs, 0xE000);
-            FcCharSetAddChar(cs, 0xF6B1);
-        }
-        if (script == QFont::MiscellaneousSymbols)
-            FcCharSetAddChar(cs, 0x2714);
         FcPatternAddCharSet(pattern, FC_CHARSET, cs);
         FcCharSetDestroy(cs);
     }

+#ifdef FONT_MATCH_DEBUG
+        printf("final pattern contains:\n");
+        FcPatternPrint(pattern);
+#endif
+
     QFontEngine *fe = 0;

     for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) {
--- src/kernel/qfontdatabase.cpp
+++ src/kernel/qfontdatabase.cpp
@@ -554,7 +554,7 @@ static const unsigned short sample_chars
     // GeometricSymbols,
     { 0x2500, 0x0 },
     // MiscellaneousSymbols,
-    { 0x2640, 0x0 },
+    { 0x2640, 0x2714, 0x0 },
     // EnclosedAndSquare,
     { 0x2460, 0x0 },
     // Braille,
[/PHP]
回复 支持 反对

使用道具 举报

发表于 2007-4-7 20:56:27 | 显示全部楼层
从来没遇到问题,opera一直乖乖的,可能是因为没有用流行的utf8的缘故。
qt4的程序倒是有问题,字体很小
回复 支持 反对

使用道具 举报

发表于 2007-4-7 22:16:03 | 显示全部楼层
不是utf8的问题。确实是个bug。你没出问题是因为你的中文字体用的少。
回复 支持 反对

使用道具 举报

发表于 2007-4-7 22:29:37 | 显示全部楼层
以前用的vera sans yuanti,然后用的STHei,现在用的wqy0.8
不过确实。。每次我都是让opera使用一个统一的字体
还有就是我在使用某些字体的时候会很慢,比如我把地址栏弹出来的下拉菜单的字体换成一款很漂亮的英文字体之后每次第一次输入地址的时候都要等上10多秒
是不是字体缓存什么之类的问题?换成另外的字体就不会卡在哪里
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表