来源:
http://qtcn.org/bbs/simple/?t59684.html
https://blog.csdn.net/jigetage/article/details/79745939
1.
是可以实现的,看看Qt的例子:painterpath。
里面设置了一下这个QPen,然后结合QPainterPath::addText()函数。
2.
使用QPainterPath::addText()的确可以实现文字黑边的的效果,但是对于小字体(基本上只有一个像素宽的文字)实现效果并不理想,无论是调节字体的粗细,还是减小边线的宽度,最后得到的效果总是很不自然:最近发现了一个笨办法能够达到这种小字体增加黑边的效果:先使用黑色的相同字体在预定绘制文字的位置处分别向四周偏移一个像素绘制黑色文字,然后再用文字颜色绘制文字:
- painter.save();
painter.setPen(QPen(Qt::black, 1));
painter.setBrush(Qt::NoBrush);
int offset_x[8] = { -1, 0, 1, 1, 1, 0, -1, -1 };
int offset_y[8] = { -1, -1, -1, 0, 1, 1, 1, 0 };
for (int i = 0; i < 8; ++i)
{
QRectF r = rect; // 预定绘制文字的Rectangle
r.moveCenter(r.center() + QPointF(offset_x[i], offset_y[i]));
painter.drawText(r, flag, text);
}
painter.restore();
painter.drawText(rect, flag, text);
这个办法的效率可能有些低,但是效果还是比较好的。
3.
//! 设置字体黑色描边
QTextCharFormat format;
format.setTextOutline(QPen(Qt::black, 0.2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
mergeCurrentCharFormat(format);
setText(text);