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

2023-11-02

目录

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 坐标轴

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 人脸相关公开数据集

    1 皮肤分割和面部检测数据集 FSD 1 数据集名称 Face and Skin Detection FSD Database 2D图像 2 数据集简介 The Face and Skin Detection FSD Database is
  • nodejs使用kafka

    什么是卡夫卡 kafka 是一种分布式的 基于发布 订阅的消息系统 消息以消息队列的形式进行发送 如何使用kafka 安装kafka npm i kafka node 配置config 配置kafka的地址和topic 放在config文件
  • 【VQ-VAE论文精读+代码实战】Neural Discrete Representation Learning

    VQ VAE论文精读 代码实战 Neural Discrete Representation Learning 0 前言 Abstract 1 Introduction 提出现有方法的问题并说明有哪些贡献 2 Related Work 提出
  • vue中click无效问题

    当父元素为relative 子元素为absolute时可能会出现click点击无效 无法触发onClick事件的情况 目前已知两种解决方法 1 最外层div的z index层级设置比里面绝对定位的大 2 用 click prevent也是可
  • 【机器学习】特征工程:时间特征构造以及时间序列特征构造(含源代码理解)

    目录 特征工程 时间特征构造以及时间序列特征构造 一 前言 二 特征构造介绍 三 时间特征构造 3 1 连续值时间特征 3 2 离散值时间特征 3 2 1 时间特征拆解 3 2 2 时间特征判断 3 2 3 结合时间维度的聚合特征 四 时间
  • shell浅谈之三for、while、until循环

    一 简介 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式 有三种常用的循环语句 for while和until while循环和for循环属于 当型循环 而until属于 直到型循环 循环控制符 break和conti
  • 【Redis速通】基础知识2 - 常用数据结构

    Redis 通用指令 下面是一些 Redis 的通用命令 你可以根据下表进行简单的复习 键操作命令 SET 设置指定键的值 GET 获取指定键的值 DEL 删除指定键 EXISTS 检查指定键是否存在 KEYS 获取匹配指定模式的键列表 字
  • MyBatis代码生成器-Example讲解

    什么是example类 mybatis generator会为每个字段产生Criterion 为底层的mapper xml创建动态sql 如果表的字段比较多 产生的example类会十分庞大 理论上通过example类可以构造你想到的任何筛
  • Linux JAVA环境的搭建tomcat的部署(含多实例)

    tomcat tomcat是Apache软件基金会项目中的一个核心项目由 Apache Sun 和其他一些公司及个人共同开发而成 tomcat 是 Java 语言开发的 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器 to
  • 快排和归并排序算法的模板及运用

    快排和归并排序算法的模板及运用 一 快速排序 二 快速选择 三 归并排序 四 逆序对的数量 一 快速排序 核心思想 把一个序列分为两部分 左半部分所有数均小于等于或大于等于右半部分所有数 递归处理左右两部分 具体步骤 其中q为一个数组 l为
  • windows下SSH服务的开启

    本人服务安装环境是win7 启动程序是freeSSHd freeSSHd下载链接如下 链接 https pan baidu com s 18ZNS5PvACo30fYjRhI ZPA 提取码 39e7 运行 exe文件 默认安装即可 安装路
  • New Year and Social Network【Hello 2020 F】【拓扑+LCA+贪心】

    题目链接 看到比赛的时候zzq大聚聚用了LCT做的 在线 首先 我们可以发现 两棵大小相同 构造形状不同的树 一定是可以用另一棵树的边来维持这棵树上的每一个点的相互连通性的 我的做法 就是基于这样展开的 我们有T1 T2两棵树 现在我们要去
  • 寻找n以内的亲密数对 python编程

    问题描述 寻找n以内的亲密数对 代码格式如下 def fac n return xxx n int input 此处输入由系统自动完成不需要自己输入 只要写这样一条语句即可 4分 题目内容 对于两个不同的整数A和B 如果整数A的全部因子 包
  • 第三周项目1-(3)ListInsert、ListDelete、InitList、DestroyList函数

    问题及代码 Copyright c 2015 烟台大学计算机学院 All rights reserved 文件名称 test cpp 作者 王敏 完成日期 2015年09月16日 版本号 v1 0 问题描述 ListInsert ListD
  • Redis三种集群模式(主从复制replication、哨兵sentinel、Cluster)

    文章目录 主从复制 哨兵模式 sentinel Cluster集群 Codis https blog csdn net miss1181248983 article details 90056960 主从复制 复制 replication
  • php mysql记录用户行为_用户参与记录存储的演变_PHP教程

    有这样一个应用场景 用户有两个连续的操作A和操作B 必须是操作A完成后才能执行操作B 如果操作A没有完成就触发了操作B 则显示用户需要先执行操作A 即在操作B执行需要查询操作A是否执行过 这里引申出来的问题是 记录用户参与记录 提供针对用户
  • Manifest merger failed : android:exported needs to be explicitly specified for <activity>. Apps targ

    Manifest merger failed android exported needs to be explicitly specified for Apps targeting Android 12 and higher are re
  • pygame入门

    pygame入门 文章目录 pygame入门 说明 一 pygame的安装 二 pygame模块概览 三 pygame的 hello world 四 事件 理解事件 事件检索 处理鼠标事件 处理键盘事件 事件过滤 产生事件 五 显示 全屏显
  • 华为历年机考题收录

    1 前言 华为每年 实习生和校招 的笔试题一般都是三道编程题 大约是因为华为体量太大 岗位太多 如果每个岗位都针对性出题目 成本也高 总的来说 华为的机考题还是比较简单 即使对于我这样偶尔写写leetcode的前端开发者也是如此 华为宣讲会
  • [QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

    目录 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 是一种流行的