QT 将文字矢量化,按照设置的宽和高绘制

news/2024/9/21 21:56:30 标签: qt, c++

 1 有时候我们需要将绘制一段文字,并将按照设置的宽度和高度绘制出来。

首先我们想到的就是用QFont font(“微软雅黑”,16);

这样设置那么字体就不会是我们要的宽度和高度。

2 我们要将设置的mm转化为像素。

3 如果设置是小数如何表示呢。

下面我们上代码

说明如下:

1 字体我们只设置需要什么字体,然后设置字体的像素大小,这个像素大小就是根据需要的MM转化为像素。

2 我们这里设置font.setWeight(0); 这只如果你不需要很精确的小数,你可以设置font.setWeight(20)  //值的范围0-99。这个值可以认为字的宽度也就是粗细。

但是这有个问题,我外面设置的mm如何转为0-99中的值呢。你可以这只认为

0mm ==0  0.1mm==0.1*99   0.3mm==0.3*99  这样我们可以得到一个int整数。但是如果我想小数控制就没办法了。

3 那我们怎么做呢,我们设置font.setWeight(0);这个意思就是用的微软雅黑字体的默认粗细。

然后我们设置QPen pen; pen.setWidthF(0.6); 这样我们其实是用画笔的宽度来绘制字体的粗细。

上代码

 
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    QPen pen;
    pen.setColor(Qt::blue);
    QFont font;
    font.setFamily("微软雅黑");


    int targetHeight = 10;//mm
    qreal dpi = painter.device()->logicalDpiX();//横向DPI
    qreal mmtoInch = 25.4;//1英寸 == 25.4mm
    //将目标高度转换为像素
    qreal targetHeightPiexl = (targetHeight/mmtoInch)*dpi;  //这里我们将设置的高度转化为像素
    //将目标高度转换为像素
    font.setPixelSize((int)targetHeightPiexl);//将高度转化为字体像素
    font.setWeight(0); //字体粗细,这只设置
    pen.setWidthF(10);
    QPainterPath textPath;
    textPath.addText(QPoint(this->width()/2-10,this->height()/2-10),font,"AID World ");
    QList<QPolygonF> subPath = textPath.toSubpathPolygons();
    //对文字进行矢量化处理
    QVector<QPointF> points;
    //painter.setBrush(QBrush(Qt::blue));
    painter.setPen(pen);
    painter.setFont(font);
    for(int i=0;i<subPath.size();i++)
    {
        painter.drawPolygon(subPath.at(i));
    }
    painter.fillPath(textPath,painter.pen().color());
}


http://www.niftyadmin.cn/n/5669515.html

相关文章

管理依赖版本-maven工程parent项目巧配置

本文目标&#xff1a;开发人员&#xff0c;在了解pom文件properties、dependencyManagement标签用法的条件下&#xff0c;进行依赖包版本统一维护&#xff0c;达到统一维护项目依赖jar包版本的程度。 文章目录 1 场景2 要点3 总结/练习 1 场景 maven工程多模块项目&#xff0c;…

C++ 起始帧数、结束帧数、剪辑视频

C 指定起始帧数、结束帧数、 剪辑视频 C 无法直接用H264&#xff0c;只能用avi编码格式 #include <iostream> #include <opencv2/opencv.hpp>int main() {// 读取视频&#xff1a;创建了一个VideoCapture对象&#xff0c;参数为摄像头编号std::string path &quo…

论文阅读笔记:Sapiens: Foundation for Human Vision Models

Sapiens: Foundation for Human Vision Models 1 背景1.1 问题1.2 目标 2 方法3 创新点4 模块4.1 Humans-300M数据集4.2 预训练4.3 2D位姿估计4.4 身体部位分割4.5 深度估计4.6 表面法线估计 5 实验5.1 实现细节5.2 2D位姿估计5.3 身体部位分割5.4 深度估计5.5 表面法线估计5.6…

【RabbitMQ 项目】服务端:数据管理模块之绑定管理

文章目录 一.编写思路二.代码实践 一.编写思路 定义绑定信息类 交换机名称队列名称绑定关键字&#xff1a;交换机的路由交换算法中会用到 没有是否持久化的标志&#xff0c;因为绑定是否持久化取决于交换机和队列是否持久化&#xff0c;只有它们都持久化时绑定才需要持久化。绑…

详解 FFmpeg 中的 -map 选项

FFmpeg 是一个强大的多媒体处理工具&#xff0c;可以处理各种音视频转换、编辑任务。-map 选项是 FFmpeg 中非常重要且灵活的一个功能&#xff0c;它允许用户精确控制输入流如何映射到输出文件中。使用 -map&#xff0c;可以指定视频、音频或字幕等特定流进行处理&#xff0c;这…

go语言基础入门(一)

变量声明:批量声明变量:变量赋值: 声明变量同时为变量赋值可以在变量声明时为其赋值go中赋值时的编译器会自动根据等号右侧的数据类型自动推导变量的类型使用 : 进行赋值匿名变量 常量常量计数器iota1. 使用场景2. 基本用法3. 简化语法4. 自定义增量5. 复杂使用go的类似枚举 使…

opencv滤波算法总结

opencv平滑算法总结 1、高斯滤波 有大佬已经写的很好了&#xff0c;直接引用&#xff0c;备忘 链接: 高斯滤波 按照正态分布概率&#xff0c;将卷积核内灰度值加权求出最终的灰度值 2、中值滤波 最终取值为卷积核的中值 3、均值滤波 最终取值为卷积核的均值 4、双边滤波…

Hadoop的安装和使用

1. Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架&#xff0c;并且是以一种可靠、高效、可伸缩的方式进行处理的&#xff0c;它具有以下几个方面的特性。 高可靠性。高效性。高可扩展性。高容错性。成本低。运行在Linux平台上。支持多种编程语言。 2. 分布…