Qt:46---QPainter绘图之QPen、QBrush、QFont工具
- 这3个工具都是用来辅助QPainter绘图的
一、QPen
- 功能:用于绘图时对线条进行设置,主要包括线宽、颜色、线型等
常用函数
- 通常一个设置函数都有一个对应的读取函数,例如setColor()用于设置画笔颜色,对应的读取画笔颜色的函数为color()。下面仅列出了设置函数
线条样式
- setStyle(Qt::PenStyle style)函数:用于设置线条样式,参数是一个Qt::PenStyle枚举类型(Qt::NoPen表示不绘制线条)
- setDashOffset()、setDashPattern()函数:用于设置自定义的线条样式
端点样式
- setCapStyle(Qt::PenCapStyle style)函数:用于设置线条端点样式,参数是一个Qt::PenCapStyle枚举类型
连接样式
- setJoinStyle(Qt::PenJoinStyle style)函数:用于设置线条连接样式,参数是一个Qt::PenJoinStyle枚举类型
二、QBrush
- 功能:定义了QPainter绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等
基本函数
- 与QPen类似,对应的setXXX函数都用对应的XXX函数
setStyle()函数
- 该函数用于设置画刷的样式,参数是Qt::BrushStyle枚举类型,常见的有下面几种
- 渐变填充需要使用专门的类作为Brush赋值给QPainter,后面介绍
渐变填充
有3个实现渐变填充的类:
- QLinearCradient类:线型渐变。指定一个起点及其颜色,终点及其颜色,还可以指定中间的某个点的颜色,起点至终点之间的颜色会线性插值计算,得到线性渐变的填充颜色
- QRadialGradient类:有“简单辐射渐变”和“扩展辐射渐变”两种方式。简单辐射渐变是在一个园内的一个焦点和一个断点之间生成渐变颜色;扩展辐射渐变是在一个焦点圆和一个中心圆之间生成渐变色
- QConicalGradient类:圆锥形渐变,围绕一个中心点逆时针生成渐变颜色
setSpread函数:这3个类都继承自QGradient类,除了生成渐变颜色的方式不同之外,在设定的渐变颜色坐标范围之外,还需要用QGradient类的setSpread(QGradient::Spread method)函数设置延展方式。QGradient::Spread枚举类型有3种取值,分别表示3种延展效果
- PadSpread:使用结束点的颜色填充外部区域,这是缺省的方式
- RepeatSpread:是重复使用渐变方式填充外部区域
- ReflectSpread:是反射式重复使用渐变方式填充外部区域
演示案例
- 重写paintEvent函数
void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);int W=this->width(); //绘图区的宽int H=this->height(); //绘图区的高QRect rect(W/4,H/4,W/2,H/2);//中间区域矩形框//设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);pen.setStyle(Qt::SolidLine);//设置图片QPixmap texturePixmap(":/pic/1.jpg");//设置画刷QBrush brush;brush.setStyle(Qt::TexturePattern);brush.setTexture(texturePixmap);//添加画刷painter.setBrush(brush);//开始绘图painter.drawRect(rect); }
QRadialGradient类“辐射渐变”填充案例
- 构造函数参数:(cs,cy):辐射填充的中心点。radius:辐射填充区的半径。(fx,fy):焦点坐标
- setColorAt()函数:设置辐射渐变的起点颜色和终点颜色
- setSpread()函数:设置图形延展方式
void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);int W=this->width(); //绘图区的宽int H=this->height(); //绘图区的高//辐射填充的中心点:W/2,H/2 ;辐射填充区的半径:qMax(W/8,H/8) ;焦点坐标(设置为与中心点相同):W/2,H/2QRadialGradient radialGrad(W/2,H/2,qMax(W/8,H/8),W/2,H/2);radialGrad.setColorAt(0,Qt::green); //0表示起点,即辐射中心点radialGrad.setColorAt(1,Qt::blue); //1表示终点,即填充区圆的圆周radialGrad.setSpread(QGradient::ReflectSpread); //设置延展方式painter.setBrush(radialGrad);painter.drawRect(this->rect());//绘图 }
QLinearCradient类“线型渐变”填充案例
- QLinearCradient类构造函数参数:参数1和2表示填充区的起点坐标,参数3和4表示终点坐标。根据定义不同可以实现水平渐变、垂直渐变或对角渐变等不同效果
void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);int W=this->width(); //绘图区的宽int H=this->height(); //绘图区的高//QLinearGradient linearGrad(rect().left(),rect().top(),rect().right(),rect().bottom()); //对角线形式QLinearGradient linearGrad(rect().left(),rect().top(),rect().right(),rect().top()); //从左到右形式linearGrad.setColorAt(0,Qt::blue); //起点颜色linearGrad.setColorAt(0.5,Qt::green); //中间点颜色linearGrad.setColorAt(1,Qt::red); //终点颜色linearGrad.setSpread(QGradient::ReflectSpread); //设置延展方式painter.setBrush(linearGrad);painter.drawRect(this->rect()); }
QConicalGradient类“圆锥形渐变”填充案例
- QConicalGradient类构造函数参数:指定了中心点坐标和起始角度,然后设置多个点的颜色
- QConicalGradient圆锥形填充没有延展效果
void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);int W=this->width(); //绘图区的宽int H=this->height(); //绘图区的高QConicalGradient coniGrad(W/2,H/2,45);coniGrad.setColorAt(0,Qt::yellow);coniGrad.setColorAt(0.5,Qt::blue);coniGrad.setColorAt(1,Qt::green);painter.setBrush(coniGrad);painter.drawRect(this->rect()); }
三、QFont
- 设置字体,QFont不仅可以用于QPainter,还可以用于其他地方,例如设置控件的文本字体等
相关函数
- 用QFontDialog::getFont对话框获取字体,见文章:https://blog.csdn.net/qq_41453285/article/details/91409774
//设置字体大小 void QFont::setPointSize(int pointSize)//设置字体是否粗体 void QFont::setBold(bool enable)
Qt:46---QPainter绘图之QPen、QBrush、QFont工具相关推荐
- Qt使用QPainter绘图的缩放问题
QPainter path(this); //调用画家QTransform transform; //定义画家的转换transform.translate(50,100); //画的左上角起点为(50 ...
- Qt中QPainter基本绘图
QWidget 派系的只能在paintEvent中进行重绘:如果你想要很好的交互功能的话推荐QGraphicsView框架,自定义Item的绘制在paint函数:如果你想利用线程绘制的话,你可以创建个 ...
- 【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能
1. QPainter绘图事件 简介 Qt的绘图系统允许使用现同的API在屏幕和其他打印设备上进行绘制.整个绘图系统基于 QPainter.QPaintDevice.QPaintEngine 三个类. ...
- QPainter 画笔(QPen)和画刷(QBrush)
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕上和绘图·设备上进行绘制,主要基于QPainter.QPainterDevice和QPainterEngine这3个类.QPainter执行绘 ...
- 【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)
QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage.QOpenGLPaintDevice.QWidget 和QPaintDevice 显示图形(线.形状.渐变等). ...
- 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件
GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...
- Qt4_用QPainter绘图
二维图形 Qt的二维图形引擎是基于QPainter类的,QPainter既可以绘制几何图形(点.线.矩形.弧形.饼状图.多边形.贝塞尔弧线等),也可以绘制像素映射.图像和文字.此外,QPainter也 ...
- 使用Qt进行2D绘图
文章目录 基本绘制和填充 基本图形的绘制和填充 1. 绘制图形 2. 使用画笔 3. 使用画刷 渐变填充 1. 线性渐变 2. 径向渐变 3. 锥形渐变 坐标系统 抗锯齿渲染 1. 逻辑表示 2. 抗 ...
- Qt:QChart绘图介绍(主要包含类:QChart,QTableWidget,QGridLayout)
Qt:QChart绘图介绍(主要包含类:QChart,QTableWidget,QGridLayout) 首先点击[打开]摁键,从excel中读入相关数据 之后点击[计算]摁键,将数据进行处理,并将部 ...
最新文章
- 贸易保护主义不能解决德国光伏企业的问题
- mysql如何存储表情,如何让mysql支持存储表情
- webstorm 配置 babel
- SAP UI5 Manifest fill logic
- 初中计算机ppt教案,初中计算机ppt教案.doc
- Linux内存管理详解
- java ajax data_jquery ajax 方法中传递的data参数,如何在java类中获取
- 排序算法(二)Sort with Swap(0,*)
- (转载) linux安装JDK
- HttpServletRequest中文乱码
- windows上vscode 安装Fortran-language-server
- 深入浅出 MFC_华中理 工_简体版电子书pdf下载
- C# 将Big5繁体转换简体GB2312的代码
- 孙子兵法——精华摘录
- 小样儿老师:我的嵌入式学习之路(一)
- 一卡难求,什么时候才能买到原价显卡?
- 使用GPU硬件加速FFmpeg视频转码
- Android项目架构图
- elk7.7.1【系列十六】java 封装 kql 查询条件
- 如何下载通州区卫星地图高清版大图