QPainter学习

1、获取painter

QPainter painter(this);

2、设置抗锯齿

 painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

3、画圆弧

 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
 int startAngle = 30 * 16;
 int spanAngle = 120 * 16;

 QPainter painter(this);
 painter.drawArc(rectangle, startAngle, spanAngle);

rectangle是绘制的区域;

startAngle 、spanAngle是开始角度和结束角度,注意乘16,画圆就是360x16=5760

4、设置画笔

painter.setPen(QPen(Qt::blue,4,Qt::DashLine));//设置画笔形式 

5、设置画刷

painter.setBrush(QBrush(Qt::red,Qt::SolidPattern));//设置画刷形式
复制代码
QRadialGradient radialGradient(0, 0, radius, 0, 0);
radialGradient.setColorAt(0.50, Qt::transparent);
radialGradient.setColorAt(0.60, color);
radialGradient.setColorAt(0.67, m_shadowColor);
radialGradient.setColorAt(0.69, m_bgColor);
radialGradient.setColorAt(0.89, m_bgColor);
radialGradient.setColorAt(0.90, m_shadowColor);
radialGradient.setColorAt(0.95, color);
radialGradient.setColorAt(1, Qt::transparent);
painter.setBrush(radialGradient);
复制代码

 

6、画矩形

painter.drawRect(20,20,160,160);

7、画圆和椭圆

先假想一个矩形rect,将圆或椭圆放在矩形正中间,如果矩形是正方形则画的是圆,否则是椭圆

painter.drawEllipse(20,20,210,160);

4个参数是矩形的左上角坐标x、y,矩形的宽度、长度

8、画圆角矩形

painter.drawRoundRect(20,20,210,160,50,50);

最后两个参数决定角的圆度,它可以为0到99之间的任意值(99代表最圆)

9、画扇形图

painter.drawPie(20,20,210,160,0,500);

前四个参数定义圆(与drawEllipse()函数相同),后两个参数定义圆的样式。0为起始角度(实际单位为1/16度),500为扇形所展开的角度(单位也为1/16度)。
10、绘制弦

painter.drawChord(20,20,210,160,500,1000);

11、绘制圆弧

painter.drawArc(20,20,210,160,500,1000);

12、绘制贝塞尔曲线

painter.drawQuadBezier(QPointArray(QRect(20,20,210,160)));

 13、绘制文字

QRectF textRect(-radius, -radius, radius * 2, radius * 2);
painter.drawText(textRect, Qt::AlignCenter,"hello");

 14、保存和恢复

painter.save()用于保存当前状态,painter.restore()用于恢复save之前所有状态,如下:

painter.setxxx1();
painter.setxxx11();
painter.save();
//此时painter为状态1
painter.setxxx2();
painter.setxxx22();
//此时painter为状态2
painter.restore();//恢复到save之前的状态1

 15、设置字体

复制代码
QFont font;
font.setFamily("Microsoft YaHei");
font.setPointSize(16);// 大小
font.setItalic(true);// 斜体
font.setUnderline(true);// 设置下划线
font.setOverline(true); // 设置上划线
font.setCapitalization(QFont::SmallCaps);// 设置字母大小写
font.setLetterSpacing(QFont::AbsoluteSpacing, 20);// 设置字符间距
painter.setFont(font);// 使用字体
复制代码

 

posted @   朱小勇  阅读(461)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2020-04-02 python使用statsmodel
2020-04-02 python指数平滑预测
2017-04-02 常用指令
点击右上角即可分享
微信分享提示