Qt绘制各种图形

重载绘图事件:

protected:void    paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;void Widget::paintEvent(QPaintEvent *event)
{
进行绘图操作
}

绘图前操作:

//基本绘图QPainter    painter(this);//创建QPainter对象painter.setRenderHint(QPainter::Antialiasing);//painter.setRenderHint(QPainter::TextAntialiasing);//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); //划线颜色//Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLinepen.setStyle(Qt::SolidLine);//线的类型,实线、虚线等//Qt::FlatCap, Qt::SquareCap,Qt::RoundCappen.setCapStyle(Qt::FlatCap);//线端点样式//Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoinpen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);//设置画刷
//    QPixmap texturePixmap(":images/images/texture.jpg");QBrush  brush;brush.setColor(Qt::yellow); //画刷颜色brush.setStyle(Qt::SolidPattern); //画刷填充样式
//    brush.setStyle(Qt::TexturePattern); //画刷填充样式
//    brush.setTexture(texturePixmap); //设置材质图片painter.setBrush(brush);

绘图:

    painter.drawLine(rect.left(),rect.top(),rect.right(),rect.bottom());painter.drawRect(rect); //只填充定义的渐变区域painter.drawRect(this->rect()); //填充更大区域,会有延展效果painter.fillRect(rect,Qt::red);painter.drawRoundRect(rect);painter.drawRoundedRect(rect,40,20);painter.drawEllipse(rect);painter.drawPolyline(points,9);painter.drawPolygon(points,9);painter.drawPoints(points,9);painter.translate(100,300);painter.drawPath(starPath);painter.translate(200,0);painter.drawPath(starPath);painter.translate(200,0);painter.drawPath(starPath);painter.drawArc(rect,30*16,80*16);painter.drawChord(rect,90*16,120*16);painter.drawPie(rect,90*16,120*16);painter.drawText(rect,"Hello, QT");

通用函数:

void Widget::myDrawTextureRect()
{QPainter    painter(this);//创建QPainter对象painter.setRenderHint(QPainter::Antialiasing);//painter.setRenderHint(QPainter::TextAntialiasing);//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); //划线颜色//Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLinepen.setStyle(Qt::SolidLine);//线的类型,实线、虚线等//Qt::FlatCap, Qt::SquareCap,Qt::RoundCappen.setCapStyle(Qt::FlatCap);//线端点样式//Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoinpen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);//设置画刷QPixmap texturePixmap(":images/images/texture.jpg");QBrush  brush;
//   brush.setColor(Qt::yellow); //画刷颜色
//   brush.setStyle(Qt::SolidPattern); //画刷填充样式brush.setStyle(Qt::TexturePattern); //画刷填充样式brush.setTexture(texturePixmap); //设置材质图片painter.setBrush(brush);//绘图painter.drawRect(rect); //只填充定义的渐变区域
}

绘制渐变色:

void Widget::myDrawGradient()
{QPainter    painter(this);//创建QPainter对象painter.setRenderHint(QPainter::Antialiasing);//painter.setRenderHint(QPainter::TextAntialiasing);//int W=this->width(); //绘图区宽度int H=this->height(); //绘图区高度QRect   rect(W/4,H/4,W/2,H/2); //中间区域矩形框//设置画笔
//   QPen    pen;
//   pen.setStyle(Qt::NoPen);//线的类型,实线、虚线等
//   painter.setPen(pen);//线性渐变
//    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);  //展布模式
//QGradient::PadSpread ,QGradient::RepeatSpread, QGradient::ReflectSpreadpainter.setBrush(linearGrad);//径向渐变
//    QRadialGradient  radialGrad(W/2,H/2,qMax(W/8,H/8),W/2,H/2);radialGrad.setColorAt(0,Qt::white);
//    radialGrad.setColorAt(0,Qt::green);
//    radialGrad.setColorAt(1,Qt::blue);
//    radialGrad.setSpread(QGradient::ReflectSpread);
//    //QGradient::PadSpread ,QGradient::RepeatSpread, QGradient::ReflectSpread
//    painter.setBrush(radialGrad);//圆锥型渐变
//    QConicalGradient  coniGrad(W/2,H/2,45);
//    coniGrad.setColorAt(0,Qt::yellow);
//    coniGrad.setColorAt(0.5,Qt::blue);
//    coniGrad.setColorAt(1,Qt::green);coniGrad.setSpread(QGradient::PadSpread); //对于锥形渐变不起作用
//    painter.setBrush(coniGrad);//绘图
//   painter.drawRect(rect); //只填充定义的渐变区域painter.drawRect(this->rect()); //填充更大区域,会有延展效果
}

绘制各种图形:

void Widget::myDrawShape()
{QPainter    painter(this);//创建QPainter对象painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);int W=this->width(); //绘图区宽度int H=this->height(); //绘图区高度//设置画笔QPen    pen;pen.setWidth(3); //线宽pen.setColor(Qt::black); //划线颜色//Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLinepen.setStyle(Qt::SolidLine);//线的类型,实线、虚线等//Qt::FlatCap, Qt::SquareCap,Qt::RoundCappen.setCapStyle(Qt::FlatCap);//线端点样式//Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoinpen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);//1. drawArc()
//   QRect   rect(W/4,H/4,W/2,H/2);
//   int startAngle = 90 * 16; //起始90°
//   int spanAngle = 90 * 16;   //旋转90°
//   painter.drawArc(rect, startAngle, spanAngle);//2. drawChord()
//   QRect   rect(W/4,H/4,W/2,H/2);
//   int startAngle = 90 * 16; //起始90°
//   int spanAngle = 90 * 16;   //旋转90°
//   painter.drawChord(rect, startAngle, spanAngle);//3.drawConvexPolygon()
//   QPoint points[4]={
//      QPoint(5*W/12,H/4),QPoint(7*W/12,H/4),
//      QPoint(3*W/4,5*H/12),QPoint(3*W/4,7*H/12),QPoint(7*W/12,3*H/4),
//      QPoint(5*W/12,3*H/4),QPoint(W/4,7*H/12),
//      QPoint(W/4,5*H/12),QPoint(5*W/12,H/4)
//   };
//   painter.drawConvexPolygon(points, 4);//4. drawEllipse
//   QRect   rect(W/4,H/4,W/2,H/2);
//   painter.drawEllipse(rect);//5. drawImage
//   QRect   rect(W/4,H/4,W/2,H/2);
//   QImage  image(":images/images/qt.jpg");
//   painter.drawImage(rect, image);//6.  drawLine
//   QLine   Line(W/4,H/4,W/2,H/2);
//   painter.drawLine(Line);//7.  drawLines
//   QRect   rect(W/4,H/4,W/2,H/2);//   QVector<QLine> Lines;
//   Lines.append(QLine(rect.topLeft(),rect.bottomRight()));
//   Lines.append(QLine(rect.topRight(),rect.bottomLeft()));
//   Lines.append(QLine(rect.topLeft(),rect.bottomLeft()));
//   Lines.append(QLine(rect.topRight(),rect.bottomRight()));//   painter.drawLines(Lines);// 8.QPainterPath
//   QRect   rect(W/4,H/4,W/2,H/2);
//   QPainterPath  path;
//   path.addEllipse(rect);
//   path.addRect(rect);
//   painter.drawPath(path);//9.drawPie
//   QRect   rect(W/4,H/4,W/2,H/2);
//   int startAngle = 40 * 16;//起始40°
//   int spanAngle = 120 * 16;//旋转120°
//   painter.drawPie(rect, startAngle, spanAngle);//10. drawPixmap
//   QRect   rect(W/4,H/4,W/2,H/2);
//   QPixmap   pixmap(":images/images/qt.jpg");
//   painter.drawPixmap(rect, pixmap);//11. drawPolygon
//   QPoint points[]={
//      QPoint(5*W/12,H/4),
//      QPoint(3*W/4,5*H/12),
//      QPoint(5*W/12,3*H/4),
//      QPoint(2*W/4,5*H/12),
//   };
//   painter.drawPolygon(points, 4);//12.drawPolyline
//   QPoint points[]={
//      QPoint(5*W/12,H/4),
//      QPoint(3*W/4,5*H/12),
//      QPoint(5*W/12,3*H/4),
//      QPoint(2*W/4,5*H/12)
//   };
//   painter.drawPolyline(points, 4);//13.drawRect
//   QRect   rect(W/4,H/4,W/2,H/2);
//   painter.drawRect(rect);//14.drawRect
//   QRect   rect(W/4,H/4,W/2,H/2);
//   painter.drawRoundedRect(rect,20,20);//14.drawRect
//   QRect   rect(W/4,H/4,W/2,H/2);
//   QFont   font;
//   font.setPointSize(30);
//   font.setBold(true);
//   painter.setFont(font);
//   painter.drawText (rect,"Hello,Qt");//.  eraseRect
//   QRect   rect(W/4,H/4,W/2,H/2);
//   painter.eraseRect(rect);//15. fillRectQRect   rect(W/4,H/4,W/2,H/2);painter.fillRect (rect,Qt::green);//16.   fillPath
//   QRect  rect(W/4,H/4,W/2,H/2);
//   QPainterPath  path;
//   path.addEllipse(rect);
//   path.addRect(rect);
//   painter.fillPath(path,Qt::red);//17.drawPoint
//     painter.drawPoint(QPoint(W/2,H/2));//18. drawPoints
//     QPoint points[]={
//        QPoint(5*W/12,H/4),
//        QPoint(3*W/4,5*H/12),
//        QPoint(2*W/4,5*H/12)
//     };
//     painter.drawPoints(points, 3);
}

绘制图片:

//    QPixmap pixmap;
//    pixmap.load(":/images/images/qt.jpg");
//    painter.drawPixmap(rect.left(),rect.top(),pixmap);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nav2 调节纯追踪算法

纯追踪算法 纯追踪基础 The core idea is to find a point on the path in front of the robot and find the linear and angular velocity to help drive towards it. 核心思想是在机器人前方的路径上找到一个点&#xff0c;并找到一个合适的线速度和角速度&#xff0c;以驱…

MFC 简单绘图与文本编辑

目录 一.创建单文档项目 二.消息映射机制 三.WM_PAINT消息触发 四.CVIEW类 五.设备上下文 六.资源类和资源的关系 七.画线&#xff0c;矩形 八.画布 九.画笔 十.画刷 十一.利用TRACE打印日志 十二.文本编程 十三.ID号 十四.菜单栏 十五.菜单命令路由 十六.工具…

如何快速入门笔记软件『Obsidian』

前言 Obsidian 是基于 Markdown 语法的笔记软件&#xff0c;界面简洁&#xff0c;使用简单&#xff0c;功能实用&#xff0c;支持跨平台数据同步&#xff0c;实现基于双向链接的知识图谱&#xff0c;同时提供各种各样的扩展主题和插件 本文将会详细讲解笔记软件 Obsidian 的安…

如何设置静态代理IP切换电脑上网地址使用?

在当今的网络时代&#xff0c;代理IP已成为一种常见的网络访问方式。通过使用代理IP&#xff0c;我们可以隐藏自己的真实IP地址&#xff0c;从而保护自己的隐私和安全。但是&#xff0c;有时候我们需要切换代理IP来满足不同的上网需求。本文将介绍如何设置静态代理IP切换电脑上…

实现一个简单的瀑布流列表

实现一个两列的瀑布流布局&#xff0c;支持无限滚动 **思路&#xff1a;**利用flex布局&#xff0c;将列表分为左右两侧&#xff0c;因为这种方式存在一个弊端&#xff0c;就是当有一侧的高度越来越高的时候&#xff0c;滑到底部的时候就会出现一个很明显的高度差&#xff0c;为…

odoo16前端框架源码阅读——rpc_service.js

odoo16前端框架源码阅读——rpc_service.js 先介绍点背景知识&#xff0c;这样方便阅读代码。 一、 JSONRPC的规范 https://www.jsonrpc.org/specification 中文翻译版本&#xff1a;https://wiki.geekdream.com/Specification/json-rpc_2.0.html JSON-RPC是一个无状态且轻…

使用swagger-typescript-api

引言 前后端分离大致是这样的 后端&#xff1a;控制层 / 业务层 / 数据操作层前端&#xff1a;控制层 / 视图层 前后端的控制层&#xff0c;实际上就是前后端接口的对接 前后端分离&#xff0c;实现了更好地解耦合&#xff0c;但也引入了接口对接的过程&#xff0c;这个过程…

ChatGPT-3.5 插件推荐:语音输入,视频总结,联网检索

前言 GPT4 里是有内置的插件市场的&#xff0c;不过博主一直觉得自己对这个工具的使用还不够到位&#xff0c;现在购买升级版性价比不划算所以暂时还没有开。不过今天在学习使用的时候&#xff0c;发现 GPT3.5 也是可以通过网页插件方式进行升级扩展的&#xff0c;而且功能还比…

ChatGPT+Roblox,元宇宙的AI叙事逻辑#Leveling Up

MixCopilot 嗨&#xff0c;亲爱的听众朋友们&#xff01;欢迎收听我们的播客节目&#xff01;我是你们的主播&#xff1a;MixCopilot 混合副驾。今天我们要为大家带来的是我们的AI革命系列节目之一。这个系列节目聚焦于AI领域的一些最有影响力的建设者&#xff0c;他们将会讨论…

web网站 固定的邀请码字符 能被爬虫爬取吗?动态改变邀请码的字符是不是可以避免爬虫爬取或数据泄露

无论邀请码字符是固定的还是动态改变的&#xff0c;都无法完全避免爬虫爬取或数据泄露的风险。以下是一些要考虑的因素&#xff1a; 爬虫技术的发展&#xff1a;爬虫技术不断发展&#xff0c;可以智能地解析和获取网页内容。即使邀请码字符是固定的&#xff0c;高级爬虫仍然可以…

Linux - 驱动开发 - watchdog - SMP机制下多核确活

说明 理论上&#xff1a;不管IC是单核还是多核&#xff0c;只要watchdog有被循环feed&#xff0c;就不会触发超时重启&#xff0c;因此watchdog在SMP机制下的多核环境显得比较宽松&#xff0c;只要任意核存活&#xff08;喂狗&#xff09;就不会重启设备。 实际情况 有客户反…

直播间自动发言机器人的运行分享,与开发需要到的技术分析

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着人工智能技术的不断发展&#xff0c;自动发言机器人已经成为了当今社交媒体领域的重要组成部分。它们能够自动化地发布内容、回复用户评论和消息&#xff0c;大大提高…

【数据结构】栈和队列的模拟实现(两个方式实现)

前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;正在学习C&#xff0c;数据结构等&#x1f440; &#x1f493;作者主页&#xff1a;加油&#xff0c;旭杏的主页&#x1f440; ⏩本文收录在&#xff1a;再识C进阶的专栏&#x1…

Qt绘制简单图表

Qt图表类似于model/view&#xff0c;chart就是model。 创建图表的各个部件&#xff1a; QChart *chart new QChart();chart->setTitle(tr("简单函数曲线")); // chart->setAcceptHoverEvents(true);ui->chartView->setChart(chart);ui->chartVi…

网络安全自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

springboot---pom.xml

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://…

纯c语言模拟栈和队列(初学必看)

一、栈(Stack) 1.栈的概念及其结构 栈是一种特殊的线性表&#xff0c;在栈这个结构里&#xff0c;越先存进去的数据越难取出来。 这个结构就像是一个只有一端有打开的容器&#xff0c;越先放进去的球越在底部&#xff0c;想要把底部的球拿出来&#xff0c;就必须先把前面的求…

C#8.0本质论第十二章--泛型

C#8.0本质论第十二章–泛型 C#通过泛型来促进代码重用&#xff0c;在词义上等价于C模板。 在泛型编程中&#xff0c;数据类型也是一种参数。 12.1如果C#没有泛型 为object的方法使用值类型时&#xff0c;“运行时”将自动对它进行装箱&#xff0c;获取值类型的实例时则需要…

树莓派4B的测试记录(CPU、FFMPEG)

本文是用来记录树莓派 4B 的一些测试记录。 温度 下面记录中的风扇和大风扇是这样的&#xff1a; 为什么要用大风扇呢&#xff1f;因为小风扇在外壳上&#xff0c;气流通过外壳的珊格会有啸叫&#xff0c;声音不大但是很烦人&#xff0c;大风扇没这个问题&#xff0c;并且同样…

Vue3 数据响应式原理:Proxy和Reflect

我们在Vue2中使用的是Object.defineProperty方法来实现数据响应式的&#xff0c;可以通过get和set方法来监听对象的访问和修改。 但是并不能响应对象中属性的增加和删除&#xff0c;只能使用Vue.$set 和Vue.$delete 来对对象中的属性进行增加和删除。 数组也不能直接通过下标…