[QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

news2024/11/19 12:39:36

目录

4. QT画图与动画

4.1 QT的绘图系统

4.2 案例目标

4.3 绘制过程

4.4 更换控件的icon

4.5 案例2

4.6 坐标轴


4. QT画图与动画

4.1 QT的绘图系统

QT(也称为Qt Framework)是一种流行的跨平台应用程序开发框架,它提供了丰富的图形用户界面(GUI)功能,包括绘图系统。QT的绘图系统基于其自己的绘图引擎,支持2D和部分3D图形绘制。

QT的绘图系统提供了一组用于创建和操作图形图像类和函数。它支持绘制点、线、多边形和曲线等基本图元,还支持绘制文本、图像和图标等高级图元。

绘图系统还包括平移、缩放、旋转和剪切等图像变换操作。

QT的绘图系统还提供了丰富的绘图样式和效果。可以使用颜色、渐变、透明度和阴影等属性来装饰图形图像。此外,还可以通过设置笔刷和画笔的样式、线型和宽度等属性来自定义绘制外观。

在QT中,可以使用QWidget、QGraphicsView和QPainter等类来进行绘图操作。

QWidget是Qt的基本组件,提供了基本的绘图功能。

QGraphicsView提供了高级的绘图功能,例如支持图形项的布局、事件处理和交互操作。

QPainter是一个绘画的工具类,提供了各种绘制函数和属性设置函数。

通过QT的绘图系统,开发者可以轻松创建各种各样的图形用户界面和绘图应用程序,如数据可视化工具、绘图软件、图像编辑器等。无论是在桌面平台还是移动平台,QT的绘图系统都具有强大的功能和良好的跨平台兼容性。

在Qt中,有几个主要的绘图工件,用于创建和操作图形图像。以下是其中一些重要的绘图工件:

  1. QWidget:QWidget是Qt的基本绘图工件,它作为界面的基本组件,提供了基本的绘图功。可以在QWidget上使用绘图事件函数(如paintEvent)来实现自定义的绘图操作。

  2. QPainter:QPainter是一个强大的绘画工具类,用于绘制几何图形、文本、图像和图标等。通过QPainter的各种绘制函数(如drawLine、drawRect、drawText等)可以在绘图设备(如QWidget、QImage等)上进行绘制操作。

  3. QPaintDevice:QPaintDevice是一个绘图设备类,表示绘图的目标。QWidget、QImage、QPixmap等都是从QPaintDevice派生而来的绘图设备。

  4. QPen:QPen是绘图的画笔,用于设置绘图的线型、颜色、宽度等属性。可以使用QPainter的setPen函数来设置绘图所使用的画笔。

  5. QBrush:QBrush是绘图的笔刷,用于设置绘图的填充样式和颜色。可以使用QPainter的setBrush函数来设置绘图所使用的笔刷。

  6. QPolygon/QPolygonF:QPolygon/QPolygonF是多边形的类,用于定义和操作多边形的顶点。

  7. QGradient:QGradient是渐变对象的基类,用于创建线性渐变、放射性渐变和锥形渐变等效果。

  8. QPainterPath:QPainterPath是路径的类,用于定义和操作复杂图形的轮廓。可以将多个线条、曲线和多边形等连接在一起来创建自定义形状。

通过使用这些绘图工件,结合Qt提供的丰富的绘图函数和属性设置函数,可以灵活地创建和操作各种图形图像,并实现自定义的绘图效果。

4.2 案例目标

 4.3 绘制过程

 在Qt中,paintEvent是一个重要的绘图事件函数,用于在QWidget及其派生类中进行自定义绘图操作。

当需要在QWidget上进行绘图时,Qt会自动触发paintEvent事件,并将一个QPaintEvent对象作为参数传递给处理函数。在paintEvent中,可以通过QPainter对象进行绘图操作。

以下是一个简单的示例,展示了在自定义的QWidget子类中实现paintEvent的基本用法:

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget* parent = nullptr) : QWidget(parent) { }

protected:
    void paintEvent(QPaintEvent* event) override
    {
        QPainter painter(this);
        // 进行绘图操作
        // ...

        // 示例:绘制一个红色的矩形
        painter.setBrush(Qt::red);
        painter.drawRect(10, 10, 100, 100);
    }
};

在上述代码中,自定义的MyWidget类继承自QWidget,并重写了paintEvent函数。在paintEvent函数中,创建一个QPainter对象,传入QWidget的指针(即this)作为绘图设备。然后,可以使用QPainter的各种绘制函数来实现绘图操作。在示例中,设置了红色的画刷(setBrush),并使用drawRect函数绘制一个矩形。

使用类似的方式,可以在paintEvent中进行绘制点、线、多边形、文本、图像等各种绘图操作。此外,还可以通过事件处理函数或其他方式来触发update函数,从而触发paintEvent的执行,实现动态绘图效果。

请注意,在进行自定义绘图时,需要注意绘图的性能和效果。避免在paintEvent中进行过于复杂或耗时的计算,以免影响应用程序的响应性能。

 4.4 更换控件的icon

 4.5 案例2

 

 

 

 4.6 坐标轴

 

 

 

 

 

 

 

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

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

相关文章

网页无插件播放265/264视频/监控大屏/GPU解码

网页无插件播放265/264视频/监控大屏/GPU解码 先看效果 特点 GPU解码,chrome网页播放32路 h256/hevc 直播视频流,毫无压力。提供1分屏、4分屏、8分屏、9分屏、16分屏、32分屏、64分屏分屏切换不会停止播放GPU解码、无插件播放自动识别264/265,并且都是…

飞控学习笔记-梯度下降算法(gradient descent algorithm)

简介 笔记来源于文章:An_efficient_orientation_filter_for_inertial_and_inertial_magnetic_sensor_arrays 共轭: 四元数叉乘: 欧拉角等式:

vue-springboot美食商城网站的设计与实现0fh04

美食网站是在的数据存储主要通过MySQL。用户在使用应用时产生的数据通过Java语言传递给数据库。通过此方式促进美食信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的平台。述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详…

一文阐明死锁的成因及解决方案

死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 目录 一、死锁的几种情况 1、一个线程,一把锁(上面同一线程给同一对象加两…

stm32PID调参实验

使用了增量式PID,有点难调,数据一直在波动。实际中调参具有很大的不确定性,因为你这次调好了,下次再供电发现又不是那么回事。按照网上传统的调参方法,一般是先调P,I和D为0,逐渐增大P使得实际值快速到达目标…

【API生命周期看护】API监控与运维

一、基本概念 当接口完成发布、上线后,就进入了正常的运行与维护状态。此时,对于API本身的监控与运维则变得尤为重要,这是保障服务功能可用、SLA达成的重要手段。 监控与运维本身是一个非常大的概念,从DevOps这一词汇中也能看出…

Linux下做性能分析6:理解一些基础的CPU执行模型

[介绍] 前面介绍了两个典型的调度模型,如果调度没有问题,剩下的问题就是正面刚算法了。那个不是我这里要介绍的主题的。 但,Not Really。其实除了算法在消耗CPU,CPU还是有很多余力可以挖掘的,这一篇我们专门讨论一下…

MySQL “error: ‘fd’: 未知重写说明符”

文章目录 1、【问题】MySQL “error: ‘fd’: 未知重写说明符”2、【解决】增加引用头文件 1、【问题】MySQL “error: ‘fd’: 未知重写说明符” 有以下代码,mysql 的 include 和 lib 都已经加入附加目录,libmysql.lib 已经加入依赖库: #p…

IEEE ICME 2023论文|基于交互式注意力的语音情感识别联合网络

论文题目: A Joint Network Based on Interactive Attention for Speech Emotion Recognition 作者列表: 胡英,侯世静,杨华敏,黄浩,何亮 研究背景 语音情感识别(Speech Emotion Recognitio…

4. MySQL 的增删查改(重点 9000字详解)

目录 准备工作 一、数据的插入 (insert) 注意 1. 整行插入 2. 指定列的插入(常用) 3. 一次插入多行数据 4. 清空数据库的数据(truncate) 5. 拓展练习:对于数据库中的数据进行统计&#…

多智能体强化学习(MARL)研究汇总:行为分析、通信学习、协作学习、智能体建模

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应…

第一百零七天学习记录:C++核心:类和对象Ⅷ(五星重要)多态

多态 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 1、静态多态:函数重载 和 运算符重载属于静态多态,复用函数名 2、动态多态:派生类和虚函数实现运行时多态 静态多态和动态多态的区别: 1、静态多态的函数地址早绑…

Arthas的火焰图生成

之前说过用idea自带的工具生成火焰图,但是idea是在本地的,在机器上如何生成呢? 我觉得方法有很多,这里用arthas工具简单搞一搞 Arthas官网地址 下载Arthas 如果在机器上要下载整个包,arthas-boot.jar需要依赖其他的j…

上门按摩系统如何运营才能做大

预约上门按摩系统是一种在线平台或应用程序,用于帮助用户预约并安排专业按摩师上门提供按摩服务。这种系统通常为用户提供一个简便的方式来选择按摩服务类型、时间和地点,并与合适的按摩师进行预约。用户可以通过应用程序或网站浏览按摩师的资料和评论&a…

用googletest写cpp单测

框架概述 Google Test(也称为 googletest)是由 Google 开发的 C 单元测试框架。它的首个版本是在2004年发布的,作为 Google 内部的测试框架使用。随后,Google Test 在开源社区中得到广泛应用,并在许多项目和组织中成为…

总结927

今晚用了40分钟进行回顾,但这40分钟,能回顾一天所学?一共四门课,每门用10分钟回顾,光是书籍,资料的切换都需要30秒。10分钟回顾对于政治来说是足够的,但对于数学,能重做2~3道题就很不…

centos环境搭建nsq单点

简言 下载 启动nsq(单节点) 1. 启动nsqd 2. 启动nsqlookupd 3. 启动nsqadmin 查看状态 简言 1. nsq是go语言实现的分布式消息处理平台,类似我们常用的kafka,rocket mq等,目的是用来大规模地处理每天数以十亿计级别的消息。它具有分布式和…

前端:UI 交互式特效 —— Css、Js

😷😊🤺🤺🤺前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客 😁 css动画 —— 把你喜欢css动画嵌入到浏览器中_css做的动画效果怎么嵌入网页_彩色之外的…

研0进阶式学习—-数据挖掘概念与技术

目录 【 写在前面】什么是数据挖掘为何进行模式评估如何进行模式评估数据挖掘的发展趋势 【 写在前面】 本科期间,数据挖掘算法学过一些,甚至本人的毕业设计也是围绕此展开的,但是显然学得太皮毛,今天偶然读到《数据挖掘•概念与…

基于tauri+vue3+pinia2客户端管理系统程序|tauri+vite4后台系统

TauriAdmin一款跨端通用后台系统模板解决方案 基于 tauri rust webview2 整合 vite4 搭建桌面端 vue3 管理后台模板TauriVue3Admin。支持多窗口切换管理、vue-i18n多语言、动态路由权限、常用业务功能模块及动态路由缓存等功能。 使用技术 编码工具:Vscode框架技术…