QPainter 基础绘图
调用QPainter的接口来绘制一些基本的图形
头文件:
1 #include <QMainWindow> 2 #include <QPainter> 3 4 namespace Ui { 5 class MainWindow; 6 } 7 8 class MainWindow : public QMainWindow 9 { 10 Q_OBJECT 11 12 public: 13 explicit MainWindow(QWidget *parent = 0); 14 ~MainWindow(); 15 16 private: 17 void paintEvent(QPaintEvent *event); 18 19 private: 20 Ui::MainWindow *ui; 21 int m_type; 22 };
源文件:
1 #include <QRegExp> 2 #include <QPixmap> 3 #include "mainwindow.h" 4 #include "ui_mainwindow.h" 5 6 MainWindow::MainWindow(QWidget *parent) : 7 QMainWindow(parent), 8 ui(new Ui::MainWindow), 9 m_type(1) 10 { 11 ui->setupUi(this); 12 } 13 14 MainWindow::~MainWindow() 15 { 16 delete ui; 17 } 18 19 void MainWindow::paintEvent(QPaintEvent *event) 20 { 21 Q_UNUSED(event) 22 QPainter painter(this); 23 24 if(m_type == 1) // 绘制文本 25 { 26 painter.setPen(Qt::blue); 27 QFont font; 28 font.setFamily("Microsoft YaHei"); 29 font.setPointSize(50); 30 font.setItalic(true); 31 font.setBold(true); 32 painter.setFont(font); 33 painter.drawText(rect(), Qt::AlignCenter, QString::fromLocal8Bit("Qt")); 34 } 35 else if(m_type == 2) // 绘制直线 36 { 37 painter.setRenderHint(QPainter::Antialiasing, true); 38 painter.setPen(Qt::blue); 39 painter.drawLine(QPointF(0, height()), QPointF(width() / 2, height() / 2)); 40 } 41 else if(m_type == 3) // 绘制矩形 42 { 43 painter.setRenderHint(QPainter::Antialiasing, true); 44 painter.setPen(QPen(Qt::blue, 2)); 45 painter.setBrush(Qt::green); 46 painter.drawRect(50, 50, 160, 100); 47 } 48 else if(m_type == 4) // 绘制弧线 49 { 50 QRectF rect(90.0, 90.0, 80.0, 90.0); 51 int startAngle = 30 * 16; 52 int spanAngle = 120 * 16; 53 painter.setRenderHint(QPainter::Antialiasing, true); 54 painter.setPen(QPen(Qt::blue, 2)); 55 painter.drawArc(rect, startAngle, spanAngle); 56 57 } 58 else if(m_type == 5) // 绘制椭圆,绘制圆 59 { 60 painter.setRenderHint(QPainter::Antialiasing, true); 61 painter.setPen(QPen(Qt::blue, 2)); 62 painter.drawEllipse(QPointF(120, 160), 50, 20); 63 painter.setBrush(Qt::green); 64 painter.drawEllipse(QPointF(120, 140), 40, 40); 65 } 66 else if(m_type == 6) // 绘制多边形 67 { 68 painter.setRenderHint(QPainter::Antialiasing, true); 69 painter.setPen(Qt::blue); 70 static const QPointF points[6] = {QPointF(10, 40), QPointF(60, 190), QPointF(110, 160), QPointF(220, 180), QPointF(270, 120), QPointF(220, 280)}; 71 painter.drawPolygon(points, 6); 72 } 73 else if(m_type == 7) // 绘制图片 74 { 75 painter.setRenderHint(QPainter::Antialiasing, true); 76 painter.drawPixmap(rect(), QPixmap(":/images/pic.png")); 77 } 78 else if(m_type == 8) // 绘制圆角矩形 79 { 80 painter.setRenderHint(QPainter::Antialiasing, true); 81 painter.setPen(QPen(Qt::blue,2,Qt::SolidLine)); 82 painter.drawRoundRect(80,80,210,160,50,50); 83 } 84 else if(m_type == 9) // 绘制扇形 85 { 86 painter.setRenderHint(QPainter::Antialiasing, true); 87 painter.setPen(QPen(Qt::green,2,Qt::SolidLine)); 88 painter.drawPie(80,80,210,160,0,500); 89 } 90 else if(m_type == 10) // 绘制弦 91 { 92 painter.setRenderHint(QPainter::Antialiasing, true); 93 painter.setPen(QPen(Qt::green,2,Qt::SolidLine)); 94 painter.drawChord(80,80,210,160,500,1000); 95 } 96 }
----------------陌上阡头,草长莺飞-----------------
https://www.cnblogs.com/tyche116/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构