当前位置: 首页 > article >正文

Qt图形视图框架在项目中的应用

一、基本概念

        Qt 的图形视图框架(Graphics View Framework)提供了一套用于显示和管理2D图形对象的框架。它提供了一组类,这些类可以组合使用来构建用户界面、处理图形对象、实现缩放、平移、旋转等操作。以下是Qt GraphicsView框架的主要组件和结构分析:

  1. 场景(Scene):QGraphicsScene 是GraphicsView的核心概念之一。场景充当图形项(Item)的容器,它负责管理图形项的添加、移动、删除以及事件分发。场景可以是一个虚拟的2D绘图区域,你可以在其中添加各种图形项。

  2. 图形项(Item):图形项是场景中的可视元素,可以是图形、文本、图像等。QGraphicsItem 是图形项的基类,你可以从它派生自定义的图形项。图形项可以在场景中放置、移动和变换,它们可以响应用户交互和事件。

  3. 视图(View):QGraphicsView 是图形场景的可视化表示,它负责将场景中的图形项渲染到屏幕上。视图可以进行缩放、平移、旋转等操作,以便用户查看和交互场景中的图形项。

  4. 图形引擎(Graphics Engine):Qt的GraphicsView框架使用了图形引擎来进行渲染。这允许你在不同平台上以高性能方式呈现图形。通常情况下,Qt使用了底层的OpenGL或者软件渲染引擎,具体取决于平台和配置。

  5. 视图框架(View Framework):GraphicsView提供了视图框架,允许你创建多个视图以查看同一个场景,或者在多个场景之间切换。这对于复杂的图形界面或需要多个视图的应用程序非常有用。

  6. 事件处理(Event Handling):GraphicsView框架允许图形项响应用户事件,例如鼠标点击、拖拽、键盘输入等。你可以重写图形项的事件处理函数以实现自定义的交互逻辑。

  7. 图形项组合(Item Composition):图形项可以嵌套在组合项中,以形成更复杂的结构。这允许你创建复杂的图形元素,例如符号、图标或者自定义图形。

  8. 坐标转换(Coordinate Transformations):GraphicsView框架提供了用于坐标转换的功能,这允许你将图形项坐标从场景坐标系转换为视图坐标系,以便正确呈现图形。

  9. 选择和焦点(Selection and Focus):GraphicsView框架支持图形项的选择和焦点处理。用户可以选择图形项并将焦点设置到它们上,这对于编辑应用程序非常有用。

  10. 动画(Animation):你可以使用Qt的动画框架与GraphicsView结合,实现动画效果来移动、旋转、缩放图形项。

总之,Qt的GraphicsView框架提供了一个强大的工具,用于创建自定义的2D图形界面和图形应用程序。它使得开发者能够方便地创建交互式的图形应用程序,支持丰富的图形元素、事件处理和视图操作。

二、场景QGraphicsScene类

QGraphicsScene 是 Qt 中 GraphicsView 框架的一个核心类,用于管理2D图形项(QGraphicsItem)的容器,充当图形场景的背景。它提供了一种用于创建、排列、渲染和交互图形项的机制。下面是关于 QGraphicsScene 类的一些重要信息:

场景的创建:你可以通过创建一个 QGraphicsScene 的实例来初始化一个场景。通常,你可以在应用程序的主窗口或一个视图中创建场景。

1

QGraphicsScene *scene = new QGraphicsScene;

添加和删除图形项:使用场景的 addItem 函数可以将图形项添加到场景中,使用 removeItem 函数可以从场景中删除图形项。

1

2

QGraphicsItem *item = new QGraphicsItem;

scene->addItem(item);

场景尺寸:场景可以具有自定义的尺寸,可以使用 setSceneRect 函数设置场景的矩形区域。

1

scene->setSceneRect(0, 0, 800, 600);

场景视图关联:场景通常与一个或多个视图(QGraphicsView)相关联,视图用于在屏幕上呈现场景中的图形项。你可以在视图中显示同一个场景,也可以创建多个场景和视图的组合。

1

QGraphicsView *view = new QGraphicsView(scene);

事件处理:场景可以处理和分发鼠标事件、键盘事件和其他事件给场景中的图形项。你可以重写场景的事件处理函数来处理这些事件。
选择和焦点:场景支持图形项的选择和焦点,用户可以选择图形项并设置焦点。你可以使用 setSelectionArea 和 clearSelection 来控制选择,使用 setFocusItem 来设置焦点图形项。
场景的渲染:场景可以呈现自己的图形项,也可以与视图协同工作来渲染图形。它支持对图形项的渲染和更新。

三、图形项QGraphicsItem类

   QGraphicsItem 类是 Qt 中 GraphicsView 框架的核心类之一,用于表示2D图形场景中的图形项。它提供了一个抽象基类,可以通过继承它来创建自定义的图形项,以便在场景中渲染、排列和与用户进行交互。

相关文章:

Qt图形视图框架在项目中的应用

一、基本概念 Qt 的图形视图框架(Graphics View Framework)提供了一套用于显示和管理2D图形对象的框架。它提供了一组类,这些类可以组合使用来构建用户界面、处理图形对象、实现缩放、平移、旋转等操作。以下是Qt GraphicsView框架的主要组件…...

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一:继承 ElasticsearchRepository(适合简单查询) 直接使用想自定义自己的Repository接口 方式…...

STM32蜂鸣器播放音乐

STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器,实现了以下功能: 通过7个按键控制蜂鸣器发声,按键对应不同的音符。每个按键对应一个音符(Do, Re, Mi, Fa, Sol, La, Si&a…...

GitLab 中文版17.10正式发布,27项重点功能解读【二】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革

前言: DeepSeek 兑现了自己的诺言,开源了一款用于 Hopper GPU 的高效型 MLA 解码核:FlashMLA。 项目地址:https://github.com/deepseek-ai/FlashMLA 1:FlashMLA 是什么呀? MLA是DeepSeek大模型的重要技术创新点&…...

leetcode:136. 只出现一次的数字(python3解法)

难度:简单 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 &#xf…...

Isaac Sim与Isaac Lab初使用

目录 基于Omiverse下载Isaacsim安装Isaac Lab配置isaacsim环境测试克隆仓库配置python环境强化学习训练的测试 IsaacLab模板配置vscode环境ros接口安装 作为nvidia出品的仿真软件,很多机器人、机器狗【具身智能】都可以有很不错的效果,所以会使用isaac s…...

Spring AI Alibaba 工具(Function Calling)使用

一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling):https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具(Tool)”或“功能调用(Function Calling&#xf…...

Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套

在虚拟现实(VR)和扩展现实(XR)领域,触觉反馈技术正逐渐成为提升沉浸感和交互体验的重要因素。Weart作为这一领域的创新者,凭借其TouchDIVER Pro和TouchDIVER G1触觉手套,为用户带来了高度逼真的…...

[深度学习]图片分类任务

图片分类任务 文章目录 图片分类任务分类任务回归和分类如何做分类的输出 图片分类卷积神经网络保持特征图大小不变更大的卷积核和更多的卷积核层数特征图怎么变小卷积神经网络中特征图改变卷积到全连接分类任务的LOSS一个基本的分类神经网络 经典神经网络AlexNetVggNetResNet …...

关系图:赋能数据可视化的动态扩展

关系图 关系图是一种用于展示节点之间关系和连接的图表类型。具有高度的可定制性、丰富的交互功能和动画效果,能够展示节点之间的和连接,以及随着数据的变化而呈现的动态效果。 【组件概述】 1.节点和边的可定制性: 关系图提供了丰富的配置…...

k8s存储介绍(三)valume概述与emptydir

目录 一、Kubernetes 中的 Volume 详解 基本概念 Volume 的主要类型(这里简单介绍,后续章节会详细介绍) 1. 本地存储类型 2. 网络存储类型 3. 云提供商存储 4. 特殊用途类型 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) S…...

Nodejs 项目打包部署方式

方式一:PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理(需要额外安装) 二、部署步骤 1.首先在服务器上安装 PM2(推荐): npm install -g pm22.将项目代码上传到服务器&…...

uv - Getting Started 开始使用 [官方文档翻译]

文章目录 uv亮点安装项目脚本工具Python 版本pip 接口了解更多 入门安装 uv安装方法独立安装程序PyPICargoHomebrewWinGetScoopDockerGitHub 发布 升级 uvShell 自动补全卸载 第一次使用 uv特性Python 版本脚本项目工具pip 接口实用工具 获取帮助帮助菜单查看版本故障排除问题在…...

C++类与对象的的第三个简单的实战练习-3.25笔记

哔哩哔哩C面向对象高级语言程序设计教程(118集全) 简单实战三 创建项目 打开VS,点击创建一个新项目 创建一个空项目 点击下一步 点击工程名称,选择添加 选择新建项 选择C类 取名 点击确定,这时候还需要一个main.cpp …...

CentOS安装sshpass工具-自动化SSH密码认证

sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录:sshpass允许用户在命令行中直接传递密码,从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用,因为它可以在非交互式环境下完成…...

k8s中service概述(一)ClusterIP

ClusterIP 是 Kubernetes 中最基础且常用的 Service 类型,主要用于在集群内部提供稳定的网络访问端点。以下是关于 ClusterIP Service 的详细说明: 1. ClusterIP 的核心功能 集群内部访问:ClusterIP 提供一个集群内部的虚拟 IP(VI…...

详解接口的常见请求方式

详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…...

HarmonyOS-ArkUI Grip组件

我们在学习List的时候,已经捎带引入了Grid。讲解如下图所示: 也就是,如果一个表,长宽基本都是一致的,那么此时可以完全不用Grid也可以实现,并且,优先考虑的就是List。 如果List实现不了的情况下…...

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…...

jupyter使用过程中遇到的问题

1、No module named ‘notebook.extensions’ 报错内容为: No module named notebook.extensions解决办法 出现这个错误代表你尝试给 Jupyter notebook 安装自动补全的插件,但是 notebook 没安装成功; 解决办法:不用 pip 安装 n…...

mac vim命令快捷键

目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首,移动到光标所在行的"行首"$跳到行末,移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…...

【Golang】defer与recover的组合使用

在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括&#xff…...

低代码配置式Web组态解析

低代码配置式Web组态技术通过可视化操作和预置组件库,大幅降低开发门槛,适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析: ‌一、核心功能与优势‌ ‌可视化编辑与拖拽布局‌ 提供图形化编辑器&#xff0…...

KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来

第一部分&#xff1a;KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...

基于web的家政服务网站

内容摘要 由于互联网的使用&#xff0c;人们在管理、应用、服务等领域使用数据更加简洁、方便&#xff0c;大大提高了工作效率。互联网正逐渐融入我们的生活&#xff0c;影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统&#xff08;MIS&#xff09;。其开发主要…...

mac命令行快捷键

光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...

聚水潭数据集成到MySQL的最佳实践分享

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…...

线性代数核心概念与NumPy科学计算实战全解析

前言 学习方法&#xff1a; 思维导图&#xff0c;梳理 多记忆&#xff0c;函数名和功能&#xff0c;参数 学会应用&#xff0c;不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上&#xff0c;标量通常表示为一个普通的数字&#xff0c;如‌质量…...

Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案

Spring Boot中接口数据字段为 Long 类型时&#xff0c;前端number精度丢失问题解决方案 在Spring Boot中&#xff0c;当接口数据字段为 Long 类型时&#xff0c;返回页面的JSON中该字段通常会被序列化为数字类型。 例如&#xff0c;一个Java对象中有一个 Long 类型的属性 id …...