Qt绘图系统

news2024/9/21 23:36:57

文章目录

  • 一.Qt绘图系统简介
  • 二.支持绘图系统的类
  • 三.绘图后端
  • 四.绘图和填充
    • 绘图
    • 填充
      • Qt::BrushStyle
  • 五.坐标系系统

一.Qt绘图系统简介

Qt的绘画系统支持使用相同的API在屏幕和打印设备上进行绘画,并且主要基于QPainter、QPaintDevice和QPaintEngine类。这种方法的主要优点是,所有绘制都遵循相同的绘制管道,从而可以轻松添加对新功能的支持,并为不支持的功能提供默认实现。

  • QPainter用于执行绘制操作
  • QPaintDevice是可以使用QPainter绘制的二维空间的抽象,
  • QPaintEngine提供了画家用于在不同类型的设备上绘制的界面。QPaintEngine类由QPainter和QPaintDevice内部使用,除非应用程序程序员创建自己的设备类型,否则对他们来说是隐藏的。

在这里插入图片描述

二.支持绘图系统的类

说明
QBitmap单色(1位深度)像素图
QBrush定义QPainter绘制的形状的填充图案
QColor基于RGB、HSV或CMYK值的颜色
QColorSpace颜色空间抽象
QColorTransform颜色空间之间的转换
QColormap将与设备无关的QColors映射到与设备相关的像素值
QConicalGradient与QBrush结合使用,指定锥形渐变笔刷
QFont指定用于图形文本的字体查询
QFontMetrics字体度量信息
QFontMetricsF字体度量信息
QGenericMatrix表示具有N列和M行的NxM转换矩阵的模板类
QGradient与QBrush结合使用以指定渐变填充
QIcon不同模式和状态下的可扩展图标
QIconEngineQIcon渲染器的抽象基类
QImage硬件独立的图像表示,允许直接访问像素数据,并可用作绘制设备
QImageReader用于从文件或其他设备读取图像的独立于格式的界面
QImageWriter用于将图像写入文件或其他设备的格式独立接口
QLine使用整数精度的二维矢量
QLineF使用浮点精度的二维矢量
QLinearGradient与QBrush结合使用以指定线性渐变笔刷
QMargins定义矩形的四个边距
QMarginsF定义矩形的四个边距
QPagedPaintDevice表示支持多页的绘制设备
QPaintDevice可以使用QPainter绘制的对象的基类
QPaintEngineQPainter如何在给定平台上绘制给定设备的抽象定义
QPainter在小部件和其他绘制设备上执行低级绘制
QPainterPath用于绘制操作的容器,允许构建和重用图形形状
QPainterPathStroker用于生成给定画家路径的可填充轮廓
QPdfWriter类生成可用作绘制设备的PDF
QPen定义QPainter应如何绘制形状的线条和轮廓
QPixmap可用作绘画设备的屏幕外图像表示
QPoint使用整数精度定义平面中的点
QPointF使用浮点精度定义平面中的点
QPolygon使用整数精度的点矢量
QPolygonF使用浮点精度的点矢量
QRadialGradient与QBrush结合使用以指定径向渐变笔刷
QRect使用整数精度定义平面中的矩形
QRectF使用浮点精度定义平面中的矩形
QRegion指定画家的剪辑区域
QRgba64结构包含64位RGB颜色
QSize使用整数点精度定义二维对象的大小
QSizeF使用浮点精度定义二维对象的大小
QStylePainter用于在小部件中绘制QStyle元素的便利类
QSupportedWritingSystems在内部Qt字体数据库中注册字体时使用
QSvgGenerator用于创建SVG图形的绘制设备
QSvgRenderer用于将SVG文件的内容绘制到绘图设备上
QSvgWidget用于显示可缩放矢量图形(SVG)文件内容的小部件
QTransform指定坐标系的二维变换
QVector2D表示二维空间中的向量或顶点

三.绘图后端

QPaintDevice 类是可以绘制的对象的基类,即 QPainter 可以在任何QPaint设备子类上绘制。QPaintDevice的绘图功能由 QWidget, QImage, QPixmap, QPicture, QPrinter, 以及QOpenGLPaintDevice.实现。

Widget QWidget 类是 Qt Widgets 模块中用户界面元素的基类。它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自己的表示。
Image QImage类提供了一种独立于硬件的图像表示,它针对I/O以及直接像素访问和操作进行了设计和优化。 QImage支持多种图像格式,包括单色、8位、32位和阿尔法混合图像。 使用 QImage作为绘制设备的一个优点是可以以独立于平台的方式保证任何绘制操作的像素精度。另一个好处是可以在当前GUI线程之外的另一个线程中执行绘制。
Pixmap QPixmap 类是一种屏幕外图像表示,它是为在屏幕上显示图像而设计和优化的。与QImage不同,像素图中的像素数据是内部的,由底层窗口系统管理,即像素只能通过QPainter函数或通过将QPixmap转换为QImage来访问。 为了优化使用QPixmap的绘图,Qt提供了 QPixmapCache 类,该类可用于存储临时像素映射,生成这些临时像素映射时不需要使用超过缓存限制的更多存储空间。 Qt还提供了QBitmap便利类,继承了 QPixmap。 QBitmap 保证单色(1位深度)像素图,主要用于创建自定义QCursor和Brush 对象,构建QRegion对象。
OpenGL Paint Device 如前所述,Qt提供的类使在Qt应用程序中使用OpenGL变得容易。例如, QOpenGLPaintDevice启用OpenGL API以使用QPainter进行渲染。
Picture QPicture类是一个记录和回放QPainter命令的绘制设备。图片以独立于平台的格式将画家命令序列化到IO设备。QPicture也是独立于分辨率的,即QPicture可以显示在看起来相同的不同设备上(例如svg、pdf、ps、打印机和屏幕)。 Qt提供了 QPicture::load() 和 QPicture::save()函数以及用于加载和保存图片的流运算符。
Custom Backends 通过从QPaintDevice 类派生并重新实现虚拟 QPaintDevice::paintEngine()函数,可以实现对新后端的支持,以告诉 QPainter 应该使用哪个绘制引擎在该特定设备上绘制。要真正能够在设备上绘制,此绘制引擎必须是通过从QPaintEngine类派生而创建的自定义绘制引擎。

四.绘图和填充

绘图

QPainter 提供了高度优化的功能来完成大多数GUI程序所需的绘图。它可以绘制从简单图形图元(由 QPoint, QLine, QRect, QRegion 和QPolygon 类表示)到复杂形状(如矢量路径)的所有内容。在Qt中,矢量路径由QPainterPath 类表示。QPainterPath 提供了一个用于绘制操作的容器,允许构建和重用图形形状。

QPainterPath是由直线和曲线组成的对象。例如,矩形由直线组成,椭圆由曲线组成。与普通绘图操作相比,绘制路径的主要优点是复杂的形状只需要创建一次;然后可以只调用QPainter::drawPath()函数多次绘制它们。QPainterPath 对象可用于填充、勾勒和剪裁。若要为给定的绘制者路径生成可填充轮廓,请使用QPainterPathStroker 类。

使用 QPen类绘制线条和轮廓。钢笔由其样式(即线型)、宽度、画笔、端点的绘制方式(封口样式)以及两条连接线之间的连接方式(连接样式)定义。笔的画笔是一个QBrush对象,用于填充用笔生成的笔划,即 QBrush 类定义了填充模式。QPainter 还可以绘制对齐的文本和位图。绘制文本时,使用 QFont 类指定字体。Qt将使用具有指定属性的字体,或者如果不存在匹配的字体,Qt将采用最匹配的已安装字体。可以使用QFontInfo 类检索实际使用的字体的属性。此外,QFontMetrics 类提供字体度量,QFontDatabase类提供有关底层窗口系统中可用字体的信息。通常,QPainter 在 Coordinate System中绘制,但它能够使用QTransform 类执行视图和世界变换。有关详细信息,请参见坐标系,它还描述了渲染过程,即逻辑表示和渲染像素之间的关系,以及抗锯齿绘制的好处。

填充

形状使用QBrush类填充。画笔由其颜色和样式(即填充图案)定义。
Qt中的任何颜色都由支持RGB、HSV和CMYK颜色模型的QColor类表示。QColor还支持alpha混合的轮廓和填充(指定透明度效果),该类与平台和设备无关(使用 QColormap类将颜色映射到硬件)。有关详细信息,请参阅QColor类文档。可用的填充模式由 Qt::BrushStyle 枚举描述。这些包括从均匀颜色到非常稀疏图案的基本图案、各种线条组合、渐变填充和纹理。Qt提供了 QGradient 类来定义自定义渐变填充,而纹理模式是使用 QPixmap 类指定的。

Qt::BrushStyle

内容说明
Qt::NoBrush0无笔刷图案
Qt::SolidPattern1统一的颜色
Qt::Dense1Pattern2极其密集的刷纹
Qt::Dense2Pattern3非常密集的刷纹
Qt::Dense3Pattern4有点密集的笔刷图案
Qt::Dense4Pattern5半密刷纹
Qt::Dense5Pattern6有点稀疏的笔刷图案
Qt::Dense6Pattern7非常稀疏的笔刷图案
Qt::Dense7Pattern8极其稀疏的笔刷图案
Qt::HorPattern9水平线
Qt::VerPattern10垂直线
Qt::CrossPattern11交叉水平线和垂直线
Qt::BDiagPattern12后对角线
Qt::FDiagPattern13向前对角线
Qt::DiagCrossPattern14交叉对角线
Qt::LinearGradientPattern15线性梯度QBrush
Qt::ConicalGradientPattern17锥形梯度QBrush
Qt::RadialGradientPattern16径向梯度QBrush
Qt::TexturePattern24自定义图案

在这里插入图片描述

五.坐标系系统

绘制设备的默认坐标系的原点位于左上角。x值向右增加,y值向下增加。默认单位是基于像素的设备上的一个像素,打印机上的一点(1/72英寸)。
逻辑QPainter 坐标到物理 QPaintDevice 坐标的映射由QPainter 的变换矩阵、视口和“窗口”处理。默认情况下,逻辑坐标系和物理坐标系重合。QPainter 还支持坐标变换(例如旋转和缩放)。

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

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

相关文章

充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电

iPhone是非凡的设备,但一旦电池耗尽,它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中,我们解释了如果你想让你的iPhone每天运行到深夜,并尽可能多地保持这种状态,你需要采取的步…

灰豚数字人平台AI创作助手,一键成片简化短视频制作过程,创作量突破百万!

国内AI语言大模型越来越多,人工智能已经全面进入我们的日常生活。其中,灰豚AI数字人平台的AI一键成片技术以其特独优势必,越来越受到短视频创作的青睐。本文将详细介绍灰豚AI数字人平台的应用场景以未来的发展前景。 灰豚数字人官网 一、灰豚…

Vue中使用Echarts封装为公用组件(简单复制粘贴)

Vue中封装Echarts组件 前提直奔主题 本文以Vue3代码演示 Vue2同理 前提 中文官网: https://echarts.apache.org/zh/index.html npm安装Echarts npm install echarts or pnpm install echarts or yarn add echarts直奔主题 创建Echarts.vue文件,代码如…

【Java每日一题】— —第二十六题:编程定义一个经理类Manager。(2023.10.10)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【Java】Java中的零拷贝

物理内存 计算机物理内存条的容量,比如我们买电脑会关注内存大小有多少G,这个容量就是计算机的物理内存。 虚拟内存 操作系统为每个进程分配了独立的虚拟地址空间,也就是虚拟内存,虚拟地址空间又分为用户空间和内核空间&#x…

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 bash_history文件查看

首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 zhangwei zhangwei666 没有什么用啊 扫一下吧 有git git泄露 那泄露看看 真有 <?php include "mysql.php"; session_start(); if(…

JUC第二十一讲:JUC线程池:ScheduledThreadPoolExecutor详解

JUC线程池&#xff1a;ScheduledThreadPoolExecutor详解 本文是JUC第二十一讲&#xff0c;JUC线程池: ScheduledThreadPoolExecutor详解。在很多业务场景中&#xff0c;我们可能需要周期性的运行某项任务来获取结果&#xff0c;比如周期数据统计&#xff0c;定时发送数据等。在…

07_项目开发_用户信息列表

1 用户信息列表内容展示 用户信息列表&#xff0c;主要完成用户信息的添加、删除、修改和查找功能。 用户列表页面效果&#xff1a; 单击“添加用户”按钮&#xff0c;进入添加用户页面。 填写正确的信息后&#xff0c;单击“添加用户”按钮&#xff0c;会直接跳转到用户列表…

算法题:买卖股票的最佳时机 II (贪心算法解决股票问题)

这道题是贪心算法的中级难度练习题&#xff0c;由于题目设定&#xff0c;整个价格都是透明的&#xff0c;这里并不涉及需要预测股票涨势的问题。解决思路不难&#xff0c;就是一旦股票价格开始下降了就买入&#xff0c;一旦上升了&#xff0c;就赶紧卖出。&#xff08;完整题目…

算法题:盛最多水的容器(贪心算法双指针问题)

这个题目乍一看就是双指针&#xff0c;没想到官方解答也是双指针&#xff0c;我在官方的基础上优化了一下下&#xff0c;左右两边各一个指针&#xff0c;每次移动短的那一头的时候&#xff0c;不是移动一格&#xff0c;而是找到比短的那一头要长一点的&#xff0c;再进行比较。…

机器学习与模式识别作业----决策树属性划分计算

文章目录 1.决策树划分原理1.1.特征选择1--信息增益1.2.特征选择2--信息增益比1.3.特征选择3--基尼系数 2.决策树属性划分计算题2.1.信息增益计算2.2.1.属性1的信息增益计算2.2.2.属性2的信息增益计算2.2.3.属性信息增益比较 2.2.信息增益比计算2.3.基尼系数计算 1.决策树划分原…

小程序中使用echarts配置以及折线图案例(简单易懂)

第一步&#xff1a;引入echarts文件--此文件需要下载&#xff1a; 下载地址&#xff1a;点击此处进行下载echarts文件 点击Download ZIP下载压缩包&#xff0c;注意&#xff1a;此文件&#xff0c;我是从完整的文件中剥离出来的有用的&#xff0c;不会影响项目。 第二步&#…

# 解析Pikachu靶场:一个安全研究的练习场

引言 Pikachu靶场是一个非常流行的安全研究和渗透测试练习平台。这个环境包括多个安全漏洞&#xff0c;从基础的到高级的&#xff0c;供安全研究人员和渗透测试者进行实验和学习。在这篇博客中&#xff0c;我们将探讨Pikachu靶场的基本概念&#xff0c;功能&#xff0c;以及如…

vue3+vite+ts 组件中自动导入 ref 和 reactive

前言 在每个vue组件中&#xff0c;都去手动引入 ref 和 reactive 是非常繁琐的一件事&#xff0c;我们可以通过插件来完成自动导入 安装插件 npm i unplugin-auto-import -D 配置插件 在 vite.config.ts 中增加如下代码 import { defineConfig } from vite import vue fr…

初识操作系统以及Linux环境搭建

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

大数据Splunk Enterprise 平台+cpolar 实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

企架布道:中电金信应邀出席2023佛山敏捷之旅暨DevOps Meetup

近日&#xff0c;2023佛山敏捷之旅暨DevOps Meetup活动顺利举行&#xff0c;本次活动以助力大湾区金融和互联网企业敏捷DevOps实施和效能提升为主题&#xff0c;共设立 2个会场&#xff0c;16个话题分享&#xff0c;200余位金融、互联网企业相关从业人员齐聚一堂&#xff0c;共…

第二证券:市场情绪或逐步修复 十月行情值得期待

第二证券指出&#xff0c;周一A股商场探底回升、小幅轰动收拾&#xff0c;沪指全天底子出现先抑后扬的运转特征。其时上证综指与创业板指数的平均市盈率分别为12.46倍、33.94倍&#xff0c;处于近三年中位数以下水平&#xff0c;商场估值仍然处于较低区域&#xff0c;合适中长期…

excel单元格合并策略

excel单元格合并策略 证明112&#xff1f; 要证明112这个问题&#xff0c;首先我们要找到问题的关键。所谓问题的关键呢&#xff0c;就是关键的问题&#xff0c;那么如何找到问题的关键就是这个问题的关键。 比如说&#xff0c;你有一个苹果&#xff0c;我也有一个苹果&#x…

管理Linux的联网

1. RHEL9版本特点 在RHEL7版本中&#xff0c;同时支持network.service和NetworkManager.service&#xff08;简称NM&#xff09;。 在RHEL8上默认只能通过NM进行网络配置&#xff0c;包括动态ip和静态ip,若不开启NM&#xff0c;否则无法使用网络 RHEL8依然支持network.service&…