Qt:绘图API

目录

初识绘图

绘图API的使用

绘制形状(QPaintEvent)

绘制文字(画笔QPen)

内部填充(画刷QBrush)

绘制图片(QPixmap)


初识绘图

我们前面学习 Qt 主要是学 Qt 的各种控件,本质上都是画出来的
都是一些常用的东西,Qt 已经提前画好了,拿过来就能使用

实际开发中,很可能现有的控件无法满足需求,就需要自己 diy 一些控件/效果
Qt 提供的 绘图 API 就是为了解决上述问题的
实际开发中大部分情况下不需要使用 绘图 API

绘图API核心类:


画图相关的操作,一般不会放到 QWidget 的构造函数中调用执行,而是 Qt 提供了一个 paintEvent
事件处理函数,在这里进行调用

在出现下面的情况时,都能够自动触发到 QPaintEvent 事件:

  • 1.控件首次创建的时候
    比如往 QWidget 上画画
    QWidget 创建之前,画的东西当然不生效
    首次创建 QWidget 就能显示出画的东西来
  • 2.控件被遮挡, 再解除遮挡
    这个时机进行绘制也是很重要的,否则绘制的内容就会在被遮挡之后就没了
  • 3.窗口被最小化,再还原
  • 4.控件大小发生改变的时候
  • 5.主动在代码中调用 repaint 或者 update触发事件.(都是 QWidget 提供的成员函数)

因此 paintEvent 函数也就能够自动被调用


绘图API的使用

绘制形状(QPaintEvent)

在 widget.h 中需要重写 PaintEvent 函数:

函数定义如下:

上述函数的注意事项:

  • (void)event;是为了不报警告,因为下面的程序没有用到参数 event
  • 这是定义在栈上的变量,不需要考虑释放的问题,此处指定的 this,不是 父对象,而是指定绘制的设备(往啥东西上画)
  • drawLine后面的参数表示起点和终点的横纵坐标

此时效果为一条斜线:

也可以画矩形:

效果为:

也可以画圆形,前两个参数表示圆心的位置坐标,后两个参数表示圆的外接矩形的宽度和高度

正圆形:

椭圆形:

椭圆形的效果为:


绘制文字(画笔QPen)

在上述画形状的地方改为下面的代码,就可以绘制文字了:

注意理解这里的坐标的位置
此处的 0 横坐标,表示的是 文字最左侧的位置
此处的 100 纵坐标,表示的是文字的"基线位置" (整个字从上到下大约第二个三等分点的位置),也就是下图中红色线的位置:

效果为:

如果觉得字体不符合预期,也可以设置字体和字体大小:

此时效果如下:


通过画笔对象 QPen 设置绘制的形状的颜色信息:
颜色、粗细、样式

还可以设置样式:

下面设置圆形的颜色、粗细、样式:

效果为:


内部填充(画刷QBrush)

画刷QBrush 主要是起到内部填充的效果

除了颜色,还有风格:

在上述画笔的代码中,添加画刷的相关代码:

此时效果为:

上述是采用实心的方式填充的,下面采用其他方式填充:

 

效果为:

此时绿色填充中间就变为绿色的网格线了


绘制图片(QPixmap)

Qt提供了四个类来处理图像数据:Qlmage、QPixmap、QBitmap和 QPicture

它们都是常用的绘图设备

  • 其中Qlmage主要用来进行I/0 处理,它对I/0处理操作进行了优化,而且可以用来直接访问和操作像素
  • OPixmap 主要用来在屏幕上显示图像,它对在屏幕上显示图像进行了优化
  • QBitmap是 QPixmap 的子类,用来处理颜色深度为1的图像,即只能显示黑白两种颜色
  • QPicture 用来记录并重演 OPainter 命令

下面以 QPixmap 为例, 只讲解 QPixmap

先创建一个项目,再创建 qrc 文件,将前面的 cat.png 导入进项目中

同样重写 paintEvent 函数:

效果为:

除了能进行基础的绘制,还能进行图片缩放:

  • 100,100:指的是距离窗口左上角的偏移
  • 400,300:指的是图片缩放的长宽比例

效果为:

还可以进行图片旋转:

  • painter.rotate(180) 是绕着 0,0 坐标系原点进行的旋转,此时旋转的效果看不到小猫图片,因为已经旋转到窗口外面了:

    为了让图片能够显示出来,可以把坐标系原点(Painter 的起点) 平移一下
  • painter.translate(-800, -600) 表示将原点平移到 -800,-600 的位置
    因为原本的坐标系是向右和向下增长的, 现在旋转180度变为向左和向上增长,想让图片显示出来,就需要将图片向右和向下平移,所以x和y需要减小,也就是 -800,-600,此时效果为:

运行程序,效果为:


Qt:绘图API到此学习结束

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

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

相关文章

【附JS、Python、C++题解】Leetcode面试150题(9)——三数之和

一、题目​​​​​ 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足: i!j、i!k 且 j! k ,同时还满足:nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意…

开源、创新与人才发展:机器人产业的战略布局与稚晖君成功案例解析

目录 引言 一、开源:机器人产业的战略布局 促进技术进步和生态建设 吸引人才和合作伙伴 建立标准和网络效应 降低研发风险与成本 二、稚晖君:华为"天才少年计划"的成功典范 深厚的技术积累与动手能力 强烈的探索和创新意识 持续公开…

Android笔记:Android平台下SVG格式的解析与实践

在移动应用开发的广阔天地里,开发者们始终致力于打造视觉效果卓越、适配各类设备屏幕的优质应用。SVG(Scalable Vector Graphics,可缩放矢量图形)作为基于 XML 的图形格式,以其鲜明特性,为 Android 开发者提供了实现这一愿景的关键路径。接下来,本文将全方位深入解析在 …

mac本地部署Qwq-32b记录

导语 昨天看到阿里开源了Qwq-32b,号称性能可以媲美Deepseek-R1。今天晚上有空就在Mac上折腾了一下,使用ollma进行了部署,效果感觉还不错,特此记录。 环境 硬件 型号:Macbook M1 Pro 14寸内存:32G 环境…

blender学习25.3.11

【05-进阶篇】Blender咖啡小场景之咖啡杯建模_哔哩哔哩_bilibili 杯子 首先做一个圆柱体 循环切割 crtlr 往下拖拽 框住按s往里收 Gz向上点 点击顶面按插入i,往里收一下,这样就插入了一个面 插入完成之后选中这个面,按下键盘的挤压E 然后…

数据可信、隐私可控:CESS 如何打造波卡生态数据新基建?

原文:https://messari.io/report/cess-network-a-deep-dive-into-programmable-data-value-infrastructure作者:Messari编译:OneBlock波卡生态一直以来以其跨链互操作性和灵活性吸引了众多创新项目,尤其是在 DePIN(去中…

Android 列表页面终极封装:SmartRefreshLayout + BRVAH 实现下拉刷新和加载更多

在 Android 开发中,列表页面是常见的 UI 设计模式,而下拉刷新和加载更多是提升用户体验的关键功能。本文将带你从零开始,封装一个高复用性的 SmartRefreshHelper 工具类,结合 SmartRefreshLayout 和 BRVAH,实现高效、灵…

css基本功

为什么 ::first-letter 是伪元素&#xff1f; ::first-letter 的作用是选择并样式化元素的第一个字母&#xff0c;它创建了一个虚拟的元素来包裹这个字母&#xff0c;因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

基于WebRTC技术的EasyRTC嵌入式音视频SDK:多平台兼容与性能优化

在当今数字化、智能化的时代背景下&#xff0c;实时音视频通信技术已成为众多领域不可或缺的关键技术。基于WebRTC技术的EasyRTC嵌入式音视频SDK&#xff0c;凭借其在ARM、Linux、Windows、安卓、iOS等多平台上的兼容性&#xff0c;为开发者提供了强大的工具&#xff0c;推动了…

【Pandas】pandas Series last_valid_index

Pandas2.2 Series Time Series-related 方法描述Series.asfreq(freq[, method, how, …])用于将时间序列数据转换为指定的频率Series.asof(where[, subset])用于返回时间序列中指定索引位置的最近一个非缺失值Series.shift([periods, freq, axis, …])用于将时间序列数据沿指…

批量将 Excel 文档中的图片提取到文件夹

前面我们介绍过如何批量删除 Excel 文档中的所有图片或者指定的图片&#xff0c;其中就需要用到批量提取 Excel 文档中图片的操作。我们如何才能够将 Excel 文档中的图片快速的提取出来呢&#xff1f;其实单个 Excel 文档中的图片提取到文件夹中是有多种方法可以完成的&#xf…

【氮化镓】开态GaN HEMTs中氧诱导Vth漂移的缺陷演化

2019年,中国工程物理研究院电子工程研究所的Rong Wang等人基于实验研究和第一性原理计算,研究了开启态偏置下AlGaN/GaN高电子迁移率晶体管(HEMTs)中氧诱导的阈值电压(Vth)漂移的缺陷演化机理。实验结果表明,在开启态应力作用下,T型栅AlGaN/GaN HEMT的Vth发生了明显的负…

谷粒商城:性能压测JVM堆区

目录 Kit Apache JMeter VisualVM 堆内存 jvm内存模型 垃圾回收&#xff08;Garbage Collection, GC&#xff09; 新对象分配内存 GC步骤 MinorGC 性能优化 影响因素 优化 nginx动静分离 优化三级分类获取 Jvm参数配置堆区 测试 Kit Apache JMeter 压力测试&…

STM32全系大阅兵(2)

接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客

7、基于osg引擎实现读取vtk数据通过着色器实现简单体渲染(1)

1、顶点着色器代码 #version 110 /* GLSL 1.10需要显式声明精度 (OpenGL ES要求) */ #ifdef GL_ES precision highp float; #endif // 体数据采样步长 uniform float xStepSize,yStepSize,zStepSize; // 体数据纹理和颜色纹理 uniform sampler3D baseTexture; uniform sample…

基于Ollama平台部署的Qwen大模型实现聊天机器人

文章目录 基于Ollama平台部署的Qwen大模型实现聊天机器人1 概述2 技术栈2.1 开发技术2.2 环境 3 实现步骤3.1 环境搭建3.1.1 WSL配置及Ubuntu安装3.1.2 Ollama安装及模型部署 3.2 模块安装3.2.1 安装Streamlit 1.42.23.2.2 安装requests 2.32.33.2.3 安装ollama 0.4.7 3.3 后端…

用DasViewer的时候3Dtiles 转osgb 可以直接指定目标坐标系吗?

没有指定坐标系选项&#xff0c;可以转换后&#xff0c;再进行一次坐标系转换。 DasViewer是一款免费极速实景三维模型浏览器&#xff0c;采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 目…

【MySQL】MySQL服务器——mysqld

1.MySQL服务器 是名为 mysqld 的数据库服务器程序&#xff0c;和“主机”&#xff08;host&#xff09;不一样是一个多线程的单进程管理对磁盘和内存中数据库的访问支持并发的客户端连接支持多个存储引擎&#xff0c;常见的存储引擎包括InnoDB、MyISAM、Memory、Archive支持事…

vue启动 localhost无法访问

1. localhost 和 127.0.0.1 虽然都指向本机&#xff0c;但它们有细微的区别&#xff1a; - localhost 是一个域名&#xff0c;需要通过 DNS 解析或本地 hosts 文件解析为 IP 地址 - 127.0.0.1 是直接的 IP 地址&#xff0c;不需要解析过程 2. 无法访问 localhost 的可…

爬虫案例十三js逆向模拟登录中大网校

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; js 逆向模拟登录中大网校 提示&#xff1a;以下是本篇文章正文内…