Qt 2D绘图功能简单总结
文章目录
- 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绘图功能简单总结相关推荐
- Qt 2D绘图之二:抗锯齿渲染和坐标系统
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...
- Qt 2D绘图(5):绘制图像基础
Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...
- 最简易的Qt白板绘图功能
由于最近工作项目中涉及到了Qt自绘高级控件等知识,因此写一篇博客来记录一下Qt最简单的绘图功能的实现过程: 以下是自制白板的demo运行结果:(Win 11 + Qt 5.12.3 + VS 2017 ...
- Qt中国象棋一—— Qt 2D 绘图入门
最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...
- QT 2d绘图优化(一)
最近在用QT做一款白板软件,在开发过程中,发现了有如下几个问题 void drawLine(QPointF endpt) {path.quadTo(path.currentPosition(),(pa ...
- 使用Qt进行2D绘图
文章目录 基本绘制和填充 基本图形的绘制和填充 1. 绘制图形 2. 使用画笔 3. 使用画刷 渐变填充 1. 线性渐变 2. 径向渐变 3. 锥形渐变 坐标系统 抗锯齿渲染 1. 逻辑表示 2. 抗 ...
- 【Qt】2D绘图之绘制简单的图形
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...
- [Qt教程] 第11篇 2D绘图(一)绘制简单图形
[Qt教程] 第11篇 2D绘图(一)绘制简单图形 楼主 发表于 2013-4-23 12:52:35 | 查看: 1398| 回复: 5 绘制简单图形 版权声明 该文章原创于Qter开源社区,作者 ...
- 【Qt入门第11篇】 2D绘图(一)绘制简单图形
导语 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.其中QPainter用来执 ...
最新文章
- Java多线程发展简史
- Windows Server 2003基础与技术指南(2)---Windows Server 2003的安装
- word文档快速取消图片的链接
- 找圈圈 (BFS简单运用)
- 第二次作业#include stdio.h int main() { int a,b,c,d,e; printf(请输入一个不多于五位的整数:\n); scanf(%...
- gslang——原生golang/RPC描述语言简介
- python中location_使用python请求模块时的LocationValueError
- pyqt5示例_木辛老师的编程课堂:Python和Qt第一讲之初识PyQt5
- IMDB TOP 250 电影榜单
- python的快速认识(二)
- Netapp存储模拟器一战成功
- 不能创建对象qmdispatch_ActiveX部件不能创建对象:‘dm.dmsoft',代码:800A01AD
- 成功的运行了DC模拟器+斑鸠!!!
- 如何将多个excel合并成一个
- dva脚手架创建的项目目录结构分析
- Nginx启动成功但页面访问不到的解决方法
- 仿QQ好友列表,QListWidget!
- securecrt修改服务器密码,securecrt怎么修改密码
- sql server 修改列属性为非必填项
- 计算机毕业设计Java校园闲置物品交易平台(系统+源码+mysql数据库+lw文档)