文章目录

  • Qt 2D绘图功能简单总结

Qt 2D绘图功能简单总结

Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片。

Qt的绘图系统中由QPainter来完成具体的绘制操作。该类提供了大量高度优化的函数来完成GUI编程所需要的大部分绘制工作。

2D 绘图有两个思路:

  • 1、不使用Qt的视图框架。

    在一个部件重绘事件paintEvent()中绘制,首先创建QPainter对象,再进行图形的绘制,最后程序结束自动销毁QPaint对象。
    

例如:

 void SimpleExampleWidget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setPen(Qt::blue);painter.setFont(QFont("Arial", 30));painter.drawText(rect(), Qt::AlignCenter, "Qt");}

**

  • 2、运用Qt的视图框架,在场景中添加图形项。可以直接添加,或者间接添加

2.1 直接添加

例如:在场景中直接添加一个多边形。

 QPolygonF myPolygon;myPolygon <<QPointF(-8, 8)<<QPointF(8, 8)<<QPointF(0,-8);//这里的_scene 是QGraphicsScene *_scene的对象。QAbstractGraphicsShapeItem *tag_pt = _scene->addPolygon(myPolygon);

2.2 间接添加
图形项可以通过鼠标绘制,可以预先绘制好,但是绘制部分还是需要QPainter来实现。

例如:创建一个一个图形项,继承QGraphicsItem

class AncItem: public QGraphicsItem
{public:AncItem();QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);void setColor(const QColor &color) { brushColor = color; }void  setAncColor(bool active);protected://  void keyPressEvent(QKeyEvent *event);void mousePressEvent(QGraphicsSceneMouseEvent *event);//   void hoverEnterEvent(QGraphicsSceneHoverEvent *event);//  void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);private:QColor brushColor;
};

然后在Paint()函数中绘制图形

void AncItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget)
{// 设置画笔颜色、宽度painter->setPen(QPen(QColor(255,255,0),2));painter->setBrush(brushColor);/*-------绘制三角形---------*/static const QPointF points[3] = {QPointF(-8, -8), QPointF(8, -8), QPointF(0,12)};painter->drawPolygon(points, 3);/*---------------绘制三条弧线-------------*/// 反走样painter->setRenderHint(QPainter::Antialiasing, true);// 设置画笔颜色、宽度painter->setPen(QPen(QColor(255, 0, 230), 2));QRectF rect(-15, -15, 30, 30);// 起始角度int startAngle = -60 * 16;// 跨越度数int spanAngle = -65 * 16;// 绘制弧线painter->drawArc(rect, startAngle, spanAngle);rect.setRect(-20, -20, 40, 40);// 起始角度startAngle = -60 * 16;// 跨越度数spanAngle = -65 * 16;// 绘制弧线painter->drawArc(rect, startAngle, spanAngle);rect.setRect(-25, -25, 50, 50);// 起始角度startAngle = -60 * 16;// 跨越度数spanAngle = -65 * 16;// 绘制弧线painter->drawArc(rect, startAngle, spanAngle);}

2D绘图会涉及到这样几个方面的内容:
1、基本图形绘制和填充。

2、图形的位置关系,坐标系统如何建立的?

3、文字和路径可以绘制吗?

4、图像如Pixmap,Image 等是如何处理?

5、图像的滤镜等算法如何处理?

6、重绘事件如何处理,如何展现动画?

这些内容都在QPainter类中可以可以实现,绘制的过程,一般也都是先设置(Settings),设置笔刷,设置画笔等,然后操作(Drawing), Qt 官方提供了一个示例 Basic Drawing example。可以很好地借鉴。

Qt 2D绘图功能简单总结相关推荐

  1. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  2. Qt 2D绘图(5):绘制图像基础

    Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...

  3. 最简易的Qt白板绘图功能

    由于最近工作项目中涉及到了Qt自绘高级控件等知识,因此写一篇博客来记录一下Qt最简单的绘图功能的实现过程: 以下是自制白板的demo运行结果:(Win 11 + Qt 5.12.3 + VS 2017 ...

  4. Qt中国象棋一—— Qt 2D 绘图入门

    最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...

  5. QT 2d绘图优化(一)

    最近在用QT做一款白板软件,在开发过程中,发现了有如下几个问题 void drawLine(QPointF endpt) {path.quadTo(path.currentPosition(),(pa ...

  6. 使用Qt进行2D绘图

    文章目录 基本绘制和填充 基本图形的绘制和填充 1. 绘制图形 2. 使用画笔 3. 使用画刷 渐变填充 1. 线性渐变 2. 径向渐变 3. 锥形渐变 坐标系统 抗锯齿渲染 1. 逻辑表示 2. 抗 ...

  7. 【Qt】2D绘图之绘制简单的图形

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...

  8. [Qt教程] 第11篇 2D绘图(一)绘制简单图形

    [Qt教程] 第11篇 2D绘图(一)绘制简单图形 楼主  发表于 2013-4-23 12:52:35 | 查看: 1398| 回复: 5 绘制简单图形 版权声明 该文章原创于Qter开源社区,作者 ...

  9. 【Qt入门第11篇】 2D绘图(一)绘制简单图形

    导语 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.其中QPainter用来执 ...

最新文章

  1. Java多线程发展简史
  2. Windows Server 2003基础与技术指南(2)---Windows Server 2003的安装
  3. word文档快速取消图片的链接
  4. 找圈圈 (BFS简单运用)
  5. 第二次作业#include stdio.h int main() { int a,b,c,d,e; printf(请输入一个不多于五位的整数:\n); scanf(%...
  6. gslang——原生golang/RPC描述语言简介
  7. python中location_使用python请求模块时的LocationValueError
  8. pyqt5示例_木辛老师的编程课堂:Python和Qt第一讲之初识PyQt5
  9. IMDB TOP 250 电影榜单
  10. python的快速认识(二)
  11. Netapp存储模拟器一战成功
  12. 不能创建对象qmdispatch_ActiveX部件不能创建对象:‘dm.dmsoft',代码:800A01AD
  13. 成功的运行了DC模拟器+斑鸠!!!
  14. 如何将多个excel合并成一个
  15. dva脚手架创建的项目目录结构分析
  16. Nginx启动成功但页面访问不到的解决方法
  17. 仿QQ好友列表,QListWidget!
  18. securecrt修改服务器密码,securecrt怎么修改密码
  19. sql server 修改列属性为非必填项
  20. 计算机毕业设计Java校园闲置物品交易平台(系统+源码+mysql数据库+lw文档)

热门文章

  1. TOPSIS(逼近理想解)算法原理详解与代码实现
  2. 快慢指针寻找循环节点
  3. loss=nan解决办法
  4. 科大星云诗社动态20210427
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170322
  6. python从random生成列表_Python 学习DAY 17 列表生成式,生成器,迭代器,time模块,random模块...
  7. 串口通信模块3:串口通信编程基础(读写、关闭)
  8. 清空SqlServer日志文件
  9. Linux中su命令详解
  10. 增加话务系统功能感想