• 13998阅读
  • 5回复

[原创]自定义QGraphicsTextItem文字对齐,文字outline及shadow效果实现 [复制链接]

上一主题 下一主题
离线piaoliushi
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-26
最近在写UI组态系统中需要实现QGraphicsTextItem的文字对齐,实现边框文字及阴影效果,如下图所示:


实现过程有一些注意的地方,在此分享出来,希望给做类似软件的朋友一些帮助,高手或对此很熟悉的朋友如果有更好的实现办法也希望分享出来共勉;
     首先当解决文字排列对齐问题,通过drawText方法可以轻松实现文字对齐,只要设置好flags参数就可以了,这里不再多说了,问题是如果添加outline效果或者shadow效果如何对齐?实现以上效果需要借助QPainterPath来绘制,问题是QPainterPath的addText(QPointF,QFont,QString)方法的第一个参数如何获得,这里还要引进一个类QFontMetrics,通过该类获得文字绘制区域的实际矩形,然后计算出输出位置就可以了,具体代码为:
QFontMetrics fm(font());

QRect curRt = fm.boundingRect(boundingRect().toRect(), alignment_ ,toPlainText());
path.addText(curRt.left(),curRt.top()+fm.ascent(), font(), toPlainText());
此时可以保证drawPath绘制的text与drawText的位置保持一致,接下来只要设置好outline的QPen宽度和颜色就可以获得outline效果了,代码如下:

QColor outlineColor(255,255,255);
QPen pen(outlineColor);
pen.setWidthF(1.5);
painter->setPen(pen);
painter->drawPath(path);


shadow效果只要将addText的第一个参数右下角或者你喜欢的方式便宜几个像素,就可以达到shadow的效果。


这里还有一个问题,如果drawText设置了自动换行属性,那么在绘制outline效果的时候怎么计算的问题,如果有朋友知道,一定要告诉我哦,谢谢!





离线rophie

只看该作者 1楼 发表于: 2013-03-27
这么好的文章没人顶?
离线lcl_data
只看该作者 2楼 发表于: 2013-03-28
支持分享!!!
离线xbnlkdbxl
只看该作者 3楼 发表于: 2013-09-30
感谢分享,很有用
离线qhxnwrz

只看该作者 4楼 发表于: 2014-09-08
谢谢分享!!!
离线lsyzsl

只看该作者 5楼 发表于: 2016-08-09
大神,你这个能四角等比缩放不?
快速回复
限100 字节
 
上一个 下一个