最近在写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效果的时候怎么计算的问题,如果有朋友知道,一定要告诉我哦,谢谢!