Qt-字体轮廓的绘制

效果如图所示:

绘制的过程如下:

 1     QFont font;
 2     font.setPointSize(this->height() * 2 * mZoomRatio / 3);
 3     font.setBold(true);
 4     if(mDrawOutlined)
 5     {
 6         QFontMetrics metrics(font);
 7         QPainterPath path;
 8         QPen pen(QColor(0, 0, 0, 100));
 9         int penwidth = font.pointSize() * 0.05;
10         if(penwidth > 6);
11         {
12             penwidth = 6;
13         }
14         pen.setWidth(penwidth);
15         int len = metrics.width(mText);
16         int w = width();
17         int px = (len - w) / 2;
18         if(px < 0)
19         {
20             px = -px;
21         }
22         //(px,py)是字体基线的起点位置,在qt助手中查找addText函数可以了解到
23         int py = (height() - metrics.height()) / 2 + metrics.ascent();
24         if(py < 0)
25         {
26             py = -py;
27         }
28         path.addText(px, py, font, mText);
29         painter.strokePath(path, pen);
30         painter.drawPath(path);
31         painter.fillPath(path, QBrush(mTextColor));
32     //    painter.drawRect(rect());
33     }
34     else
35     {
36         painter.setFont(font);
37         painter.setPen(mTextColor);
38         painter.drawText(0, 0, this->width()-1, this->height()-1, mTextFlags, mText);
39     }

代码中strokePath函数式绘制字体的轮廓, fillPath函数用于填充字体。

addText函数中(px, py)指的是绘画的起点位置,py的计算方法在上面已经给出,通过控制px可以实现左对齐、右对齐、居中等对齐方式。用qt助手查看该函数说明可以了解。

这种方法适合在不可编辑的文字区域绘制例如QLabel,QButton等,对于QTextEdit等可编辑的区域可以使用QSS来实现,实现的方法在Qt助手中已经给出了,在qt助手中搜索styleColor就可以找到。

时间: 2024-10-14 21:47:29

Qt-字体轮廓的绘制的相关文章

Qt之图形(绘制文本)

简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPainter的darwText()函数来实现,里面包含多个重载函数,其中,可以通过QRect来指定绘制的区域,也可以通过QPoint来指定绘制的起始点. QFont类可以辅助设置文本的大小.粗细.字符间距等,然后使用setFont()来设置. QFontInfo类用来获取字体的信息,可以通过fontInfo

HTML5 SVG图形轮廓线条绘制动画插件-vivus

Vivus是一款可以执行SVG路径动画的轻量级Javascript库.Vivus可以绘制SVG图形的外观.通过该svg路径动画插件,你可以使用同步或异步的方式来执行SVG图像路径的动画.Vivus提供各种不同的动画参数来让你定制你自己的SVG路径动画.类似的动画效果还有:html5 svg线条动态绘制文字轮廓边框动画 和 html5 svg线条动态绘制iphone边框动画效果. 在线演示:http://www.htmleaf.com/Demo/201501261280.html 下载地址:htt

QT绘图五:绘制美化版本扫描方向表盘

在QT绘图三中我们已经实现了一个绘制扫描表盘的简单实例,今天我们绘制一个视觉效果上面略微优于它的表盘扫描实例.源码实例站内搜索标题或者点击链接下载即可实例源码 原文地址:https://blog.51cto.com/7265851/2434151

Opencv-python 找到图像轮廓并绘制,cv2.findContours()函数,求轮廓外接矩形,cv2.boundingrect()

一.查找图像轮廓 opencv-python中查找图像轮廓的API为:findContours函数 该函数接受二值图作为参数,根据参数,可查找物体外轮廓.内外轮廓,保存轮廓点.压缩等等... 如:contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) def findContours(image, mode, method, contours=None, hierarchy=None

Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作

%测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 2 5.5277,9.1302 3 8.5186,13.662 4 7.0032,11.854 5 5.8598,6.8233 6 8.3829,11.886 7 7.4764,4.3483 8 8.5781,12 9 6.4862,6.5987 10 5.0546,3.8166 11 5.7107,3

QT绘图三:绘制一个扫描表盘

今天的绘图实例是绘制一个表盘,高手勿笑,简单示例效果如下:仅供参考示例源码点点击下载源码 原文地址:https://blog.51cto.com/7265851/2432382

QT绘图四:绘制模拟声波

今天的实例是绘制声波模拟线,当然模拟声波的方法各异,本人的实现思路只是其中一种.实例的效果如下图所示:具体实现方式请参考实例源码点击链接声音波形模拟源码 原文地址:https://blog.51cto.com/7265851/2433509

QT 字体计算

CSize fontMetricsCSize(QString source, QPainter *pDC); CSize fontMetricsCSize(QString source, QPainter *pDC){ CSize sz; QFontMetrics fontMetrics(pDC->font()); int nFontWidth = fontMetrics.width(source); int nFontHeight = fontMetrics.height(); sz = CS

OpenCV_轮廓的查找、表达、绘制、特性及匹配

我的新浪微博:http://weibo.com/u/1645794700/home?wvr=5&c=spr_web_360_hao360_weibo_t001 CV机器视觉2013CV机器视觉2013CV机器视觉2013 开始 虽然Canny之类的边缘检测算法可以根据像素间的差异检测出轮廓边界的像素,但是它并没有将轮廓作为一个整体.下一步是要将这些边缘像素组装成轮廓. 轮廓是构成任何一个形状的边界或外形线.直方图对比和模板匹配根据色彩及色彩的分布来进行匹配,以下包括:轮廓的查找.表达方式.组织方