08-1_Qt 5.9 C++开发指南_QPainter绘图

文章目录

  • 前言
  • 1. QPainter 绘图系统
    • 1.1 QPainter 与QPaintDevice
    • 1.2 paintEvent事件和绘图区
    • 1.3 QPainter 绘图的主要属性
  • 2. QPen的主要功能
  • 3. QBrush的主要功能
  • 4. 渐变填充
  • 5. QPainter 绘制基本图形元件
    • 5.1 基本图像元件
    • 5.2 QpainterPath的使用

前言

本章所介绍内容基本在《QT从入门到实战x篇》中对应有介绍,本专栏主要做简要功能介绍,到实际需要使用的时候再做详究。

1. QPainter 绘图系统

1.1 QPainter 与QPaintDevice

Qt 的绘图系统使用户可以在屏幕或打印设备上用相同的 API绘图,绘图系统基于 QPainter、QPaintDevice和QPaintEngine 类。

QPainter 是用来进行绘图操作的类,QPaintDevice 是一个可以使用QPainter 进行绘图的抽象的二维界面,QPaintEngine 给 QPainter 提供在不同设备上绘图的接口。QPaintEngine 类由 QPainter 和QPaintDevice 内部使用,应用程序一般无需和 QPaintEngine 打交道,除非要创建自己的设备类型。

一般的绘图设备包括 QWidget、QPixmap、QImage 等,这些绘图设备为 QPainter 提供一个“画布”。

1.2 paintEvent事件和绘图区

QWidget 类及其子类是最常用的绘图设备,从QWidget 类继承的类都有 paintEvent()事件,要在设备上绘图,只需重定义此事件并编写响应代码。创建一个 QPainter 对象获取绘图设备的接口,然后就可以在绘图设备的“画布”上绘图了。
在paintEvent()事件里绘图的基本程序结构是:

void Widget::paintEvent(QPaintEvent *event)
{QPainter    painter(this);//创建与绘图设备关联的QPainter对象```//painter在设备的窗口上画图
}

首先创建一个属于本绘图设备的 QPainter 对象 painter,然后使用这个 painter 在绘图设备的窗口上画图。

在这里插入图片描述

QWidget 的绘图区就是其窗口内部区域。如图8-1所示是在一个 QWidget 窗口上绘制了一个填充矩形(这个实心矩形及其边框是程序绘制的图形,其他直线和文字是为说明而加的),整个窗口内部的矩形区就是QPainter 可以绘图的区域。

QWidget的内部绘图区的坐标系统如图8-1所示,坐标系统的单位是像素。左上角坐标为(0,0),向右是X 轴正方向,向下是 Y 轴正方向,绘图区的宽度由QWidget::width()函数获取,高度由 QWidget::height()函数获取,所以,绘图区右下角的的点的坐标是(width(),height())。这个坐标系统是 QWidget 绘图区的局部物理坐标,称为视口(viewport)坐标。相应的还有逻辑坐标,称为窗口 (window)坐标,后面再详细介绍。

使用QPainter 在QWidget 上绘图就是在这样的一个矩形区域里绘图

1.3 QPainter 绘图的主要属性

用 QPainter 在绘图设备上绘图,主要是绘制一些基本的图形元素,包括点、直线、圆形、矩形、曲线、文字等,控制这些绘图元素特性的主要是 QPainter 的 3 个属性,分别如下。

  • pen 属性:是一个 QPen 对象,用于控制线条的颜色、宽度、线型等,如图 8-1 所示矩形边框的线条的特性就是由 pen 属性决定的。

  • brush 属性:是一个QBrush 对象,用于设置一个区域的填充特性,可以设置填充颜色、填充方式、渐变特性等,还可以采用图片做材质填充。图 8-1 中的矩形用黄色填充就是由 brush属性设置决定的。

  • font 属性:是一个 QFont 对象,用于绘制文字时,设置文字的字体样式、大小等属性。

使用这 3 个属性基本就控制了绘图的基本特点,当然还有一些其他的功能结合使用,比如叠加模式、旋转和缩放等功能。

关于QPainter基本功能实例,请参考书籍。

2. QPen的主要功能

QPen 用于绘图时对线条进行设置,主要包括线宽、颜色、线型等,表 8-1是 QPen 类的主要接口函数。通常一个设置函数都有一个对应的读取函数,例如 setColor()用于设置画笔颜色,对应的读取画笔颜色的函数为 color(),表 8-1 仅列出设置函数(省略了函数参数中的 const 关键字)。

在这里插入图片描述

线条颜色和宽度的设置无需多说,,QPen影响线条特性的另外3 个主要属性是线条样式(style).
端点样式(capStyle) 和连接样式 (joinStyle)。具体如何影响见书籍。

3. QBrush的主要功能

QBrush 定义了QPainter 绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等,其主要函数见表 8-2(省略了函数参数中的 const 关键字)。

在这里插入图片描述

setStyle(Qt::BrushStyle style)函数设置画刷的样式,参数是 Qt:BrushStyle style 枚举类型,该枚举类型典型的几种取值见表 8-3,详细的取值请参考Qt 的帮助文件。

在这里插入图片描述

4. 渐变填充

使用渐变填充需要用渐变类的对象作为 Painter 的 brush,有3 个实现渐变填充的类。

QLinearGradient:线性渐变。指定一个起点及其颜色,终点及其颜色,还可以指定中间的某个点的颜色,起点至终点之间的颜色会线性插值计算,得到线性渐变的填充颜色。

QRadialGradient:有简单辐射渐变和扩展辐射渐变两种方式。简单辐射渐变是在一个圆内的一个焦点和一个端点之间生成渐变颜色,扩展辐射渐变是在一个焦点圆和一个中心圆之间生成渐变色。
QConicalGradient:圆锥形渐变,围绕一个中心点逆时针生成渐变颜色。

具体使用见书籍

5. QPainter 绘制基本图形元件

5.1 基本图像元件

QPainter 提供了很多绘制基本图形的功能,包括点、直线、椭圆、矩形、曲线等,由这些基本的图形可以构成复杂的图形。QPainter 中提供的绘制基本图元的函数见对应章节。每个函数基本上都有多种参数形式,这里只列出函数名,给出了其中一种参数形式的示例代码,并且假设已经通过以下的代码获得了绘图窗口的 painter、窗口宽度W和高度H。

QPainter painter(this);
int W=this->width); //绘图区宽度
int H=this->height); //绘图区高度

同一个函数名的其他参数形式的函数原型可查阅 Qt 的帮助文件。

5.2 QpainterPath的使用

QPainterPath 是一系列绘图操作的顺序集合,便于重复使用。一个 PainterPath 由许多基本的绘图操作组成,如绘图点移动、划线、画圆、画矩形等,一个闭合的 PainterPath 是终点和起点连接起来的绘图路径。使用QPainterPath 的优点是绘制某些复杂形状时只需创建一个PainterPath,然后调用 QPainter:drawPath()就可以重复使用。例如绘制一个复杂的星星图案需要多次调用 lineto()函数,定义一个QPainterPath 类型的变量 path 记录这些绘制过程,再调用drawPath(path)就可以完成星型图案的绘制。具体见参考书籍。

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

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

相关文章

小型健身俱乐部管理系统的设计与实现_kaic

随着生活水平不断提高,人们的健身意识也不断加强,健身俱乐部作为专业的健身服务行业,已经越来越受到人们的亲睐。随着自身的规模不断扩大,客户数量的增多,传统的管理模式已不能适应现代健身机构的发展趋势,…

毕业设计——基于SSM的健身房管理系统

该系统已经上传CSDN官方资源,下载地址: https://download.csdn.net/download/qq_16397653/14027661 1.包含源程序,数据库脚本。代码和数据库脚本都有详细注释。 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善 开发环境: Eclipse ,M…

健身房会员管理系统(Java+Web+MySQL)

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 课题背景 1 1.2 课题研究的目的和意义 2 1.3 课题发展前景及趋势 3 1.4 课题内容简介 4 1.5 开发工具 4 1.5.1 MyEclipse 5 1.5.2 Tomcat 5 1.5.3 MySQL 5 1.5.4 JSP 6 1.5.5 JavaScript 6 1.6 软硬件需求 7 第二章 需求分析 8 2.…

如何选择好的健身房管理系统而且还不收费

如何选择好的健身管理系统而且还不收费 “迄今为止,中国健身行业没有好用的健身管理系统CRM商户端。身为健身从业者,需求没有被满足,我很遗憾。三年过去了,我仍然是健身从业者,这个问题依然没有解决,我决定…

计算机毕业设计——健身房管理系统

Java毕业设计工作中所做的代码研发以及论文编写,是对于我们大学四年的知识做一个总结,同时也是对我们的文字编写能力的一个检验。在大学生涯结束之际,应当对自己有两点觉悟: 1、既然学了软件工程这门专业,在今后不管会…

基于Django的健身房管理系统

目 录 摘 要 I Abstract II 1 引言 1 1.1选题背景及意义 1 1.2发展现状 1 1.3研究主要内容 2 2 关键技术介绍 4 2.1相关技术简介 4 2.1.1 B/S体系相关介绍 4 2.1.2 Python语言介绍 4 2.1.3 Djang框架介绍 5 2.2技术方案选择 6 2.3开发环境的确定 7 3 系统分析 8 3.1可行性分析 …

健身房管理系统毕业设计c语言,健身房会员管理系统设计与实现

健身房会员管理系统设计与实现 摘要:随着信息管理技术在当前各个管理领域上的普遍使用,信息系统管理的技术越来越趋于成熟,目前大部分健身房管理会员信息还是使用手动记录的方式,不但信息冗杂、录入困难,还不方便查阅&…

基于android的健身管理APP(ssm+uinapp+Mysql)

基于android的健身管理APP(ssmuinappMysql) 管理员:管理员使用本系统涉到的功能主要有首页、个人中心、用户管理、健身课程管理、课程类型管理、健身圈子管理、系统管理等功能用户:用户进入app可以实现首页、健身资讯、健身课程、健身圈子、我的等,在我的…

安全第二次

一&#xff0c;iframe <iframe>标签用于在网页里面嵌入其他网页。 1&#xff0c;sandbox属性 如果嵌入的网页是其他网站的页面&#xff0c;因不了解对方会执行什么操作&#xff0c;因此就存在安全风险。为了限制<iframe>的风险&#xff0c;HTML 提供了sandb…

Linux:Shell编辑之文本处理器(sed)

目录 绪论 1、sed的原理&#xff1a;读取 执行 显示 三个过程 2、sed 文本内容处理工具&#xff0c;文件过大怎么办&#xff1f; 3、sed的操作选项 3.1 常用选项 3.2 操作符 3.3 行号的范围打印 3.4 对包含指定字符串的内容进行打印 3.5 删 3.5.1 正则表达式删除 3.6…

【计算机视觉|生成对抗】条件生成对抗网络(CGAN)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Conditional Generative Adversarial Nets 链接&#xff1a;[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成对抗网络&#xff08;Generative Adversarial…

打靶练习:WestWild 1.1(一个简单但不失优雅的Ubuntu靶机)

主机发现和nmap信息收集 //主机发现 sudo nmap -sn 192.168.226.0/24 //扫描整个C段//端口扫描//初步扫描 sudo nmap -sT --min-rate 10000 -p- 192.168.226.131 -oA nmapscan/ports //用TCP的三次握手&#xff0c;以速率10000扫描1-65535端口&#xff0c;扫描结果以全格式…

VM虚拟机搭建详细步骤

一、安装好VMware&#xff0c;双击exe程序&#xff0c;启动软件 二、新建虚拟机 三、选择“典型”&#xff0c;点击“下一步” 四、先择“稍后安装操作系统”&#xff0c;点击“下一步” 五、选择操作系统&#xff0c;以windows server 2008 为例&#xff0c;上方选择“Microso…

在Centos环境中搭建Nginx环境

一、Nginx概念简介 Nginx是一个轻量级的高性能HTTP反向代理服务器&#xff0c;同时它也是一个通用类型的代理服务器&#xff0c;支持绝大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS等。 Nginx与redis相同&#xff0c;都是基于多路复用模型构建出的产物&#xff0c;因此它与R…

机器学习实战3-随机森林算法

文章目录 集成算法概述sklearn中的集成算法模块 RandomForestClassifier重要参数&&随机森林的分类器控制基评估器的参数n_estimatorssklearn建模流程复习交叉验证我们进行10次交叉验证&#xff0c;观察随机森林和决策树的效果n_estimators学习曲线 bootstrap & oob…

华为鸿蒙全屋定制,高速Wi-Fi信号难以配置?华为全屋定制一站解决

目前&#xff0c;采用5GHz频段的Wi-Fi路由器逐渐在大众家庭中普及开来&#xff0c;5G Wi-Fi已然成为高速网络的代名词之一。但是由于高频信号的物理特性&#xff0c;5GHz信号比原来的2.4GHz信号波长更短&#xff0c;信号衰减更快&#xff0c;很多使用单个路由器户型复杂的房屋会…

华为HiLink、海尔智家、智汀各自的核心优势?

“智能家居”这个概念出现的很早&#xff0c;但由于缺乏智能相关技术支撑&#xff0c;使得很多家电产品之间缺乏联动&#xff0c;在兼容方面缺乏数据共享&#xff0c;无法真正带给用户"智能互联"的体验等等。 在手机应用市场之中搜索“智能家居”&#xff0c;相关APP…

华为q1设置虚拟服务器,华为路由Q1怎么用 华为路由Q1设置上网图文教程

华为路由Q1怎么设置?作为一款主流智能路由器产品&#xff0c;华为路由Q1创新性采用子母路由的概念&#xff0c;通过子路由器即插即用子母机互联&#xff0c;达到提升覆盖面积的效果&#xff0c;更适合大户型使用&#xff0c;以下是小编带来的华为路由Q1设置上网教程&#xff0…

余承东自爆:华为路由器重磅旗舰新品或将来袭!

今日&#xff0c;华为消费者BG CEO余承东在今日头条上发布了一则关于华为路由器产品的最新消息。 根据消息称&#xff0c;华为路由器团队的一项技术专利获得“第十九届中国专利金奖”&#xff0c;并提到该项技术是物联网、智能家居、家庭、企业WiFi等众多应用场景中互联互通的关…

2021年全球及中国企业级路由器市场竞争格局分析,呈现出寡头竞争的市场格局「图」

一、路由器行业定义及分类 路由器是连接两个或多个网络的硬件设备&#xff0c;在网络间起网关的作用&#xff0c;是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。按照不同的分类依据&#xff0c;可将路由器分为以下几类&#xff1a; 路由器行业分类 ​ …