发博文
孙高勇的BLOG

http://blog.chinaunix.net/space.php?uid=16175364

我渴望平静,风却给了我涟漪   
个人资料
  • 博客访问:431345
  • 博文数量:144
  • 博客积分:10011
  • 博客等级:上将
  • 注册时间:2006-03-15 09:11:22
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
分类: Qt4.x学习记录

qt4.2的snapshot版本出来了,喜欢追新,就下了最新的snapshot看看,结果发现中文字体在这个版本上显示模糊。自己尝试着查找bug,发现这个不是字体引擎的问题,而是qt4.2的qpaintengine_x11在显示字体时的问题,自己对QX11PaintEngine::drawFreetype(const QPointF &p, const QTextItemInt &ti)
。。。。。。     
 for (int i = 1; i < glyphs.size(); ++i) {
     QFontEngineFT::Glyph *g = ft->cachedGlyph(glyphs[i - 1]);
     if (g
             && positions[i].x == xp + g->advance
             && positions[i].y == yp) {
             elt.nchars++;
             xp += g->advance;
        } else {
。。。。。。

进行修改如下:
  for (int i = 1; i < glyphs.size(); ++i) {
        QFontEngineFT::Glyph *g = ft->cachedGlyph(glyphs[i - 1]);
        if (g
           && positions[i].x == xp + g->advance
           && positions[i].y == yp) {

        XRenderCompositeText32(X11->display, PictOpOver, src, d->picture,
                                       maskFormat, 0, 0, 0, 0,
                                      &elt, 1);
        xp = qRound(positions[i].x);
                yp = qRound(positions[i].y);
               
                elt.glyphset = glyphSet;
                elt.chars = &glyphs[i];
                elt.nchars = 1;
                elt.xOff = qRound(xp);
                elt.yOff = qRound(yp);
                //elt.nchars++;
                xp += g->advance;
            }else {  
。。。。。。
在我的ubuntu dapper上是可以正常显示汉子了。今天把这个bug提交给了Troll公司,估计在最近这个bug就会被修复好了。其实在Task Tracker上看到有个bug id是122829的bug,处理结果是Resolved,并不是fixed,Troll公司真是不负责任,看来关键时刻,还是自己动手的好:)


[发评论] 评论 重要提示:警惕虚假中奖信息!
  • chinaunix网友 2006-12-01 00:40
    "今天把这个bug提交给了Troll公司,估计在最近这个bug就会被修复好了" 事实上,至今Qt4的新版本仍然没有解决这个问题,我已经贵文做成Qt4的专用补丁了,可惜我目前的水平还看不懂这些。
亲,您还没有登录,请[登录][注册]后再进行评论