首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QPainter的drawText的有关问题

2012-03-09 
QPainter的drawText的问题QPainter绘制和QFontMetricsF使用同样的字体。QFontMetricsF fontMetrics(gSlotFo

QPainter的drawText的问题
QPainter绘制和QFontMetricsF使用同样的字体。
QFontMetricsF fontMetrics(gSlotFont);
qreal wid = fontMetrics.width(name);
qreal height = fontMetrics.height();

painter->setPen(Qt::black);
painter->setFont(gSlotFont);
// painter->drawText( namePos, QString(name) );
QRectF tmpRect(namePos, QSizeF(wid, height));
QRectF tmpRect1;
painter->drawText( tmpRect, Qt::AlignLeft, QString(name), &tmpRect1 );

qDebug() << tmpRect1;
对于同样一段英文, fontMetrics.width(name)计算出的字体宽度和QPainter::drawText返回的tmpRect1的实际绘制的长宽不一致。
这是什么原因?请指教 !


[解决办法]
因为各种字体的上下部分都留有一段空白区域吧,所以按你计算出的区域绘制,只有宽度是对的,高度则不对。
[解决办法]
问题在:gSlotFont
你用gSlotFont的参数初始化一个新QFont变量,再用这个新变量替换原来的gSlotFont,看看效果。
[解决办法]
楼主你试试换种等宽字体,看得出来的结果是不是一致的?我记得以前写的代码,宽度是正确的。
[解决办法]

探讨

引用:

问题在:
你用gSlotFont的参数初始化一个新QFont变量,再用这个新变量替换原来的gSlotFont,看看效果。
不太懂您的意思啊。这么做有区别吗?

[解决办法]
QFontMetricsF fontMetrics(gSlotFont);
这个字体是你自己定义的,

painter->drawText( tmpRect, Qt::AlignLeft, QString(name), &tmpRect1 );
绘图时的字体是由绘图的目标窗口(也就是painter的构造参数或者begin参数)决定的。

这两个字体不一样的。除非 gSlotFont = this->font();

热点排行