图形绘制QGraphicsView、QGraphicsScene、QGraphicsItem、Qt GUI

news2024/10/7 10:21:10

QGraphicsView、QGraphicsScene、QGraphicsItem 和 Qt GUI(QGuiApplication)可以用来构建和管理基于图形的用户界面。

一、它们之间的关系:

QGuiApplication 作为应用程序的基础,提供了窗口和事件管理等功能。

QGraphicsView 则是用来显示和交互 QGraphicsScene 中的图形元素的窗口。

QGraphicsScene 提供了一个场景,用于存储和管理图形元素。

1.Qt GUI(QGuiApplication):

QGuiApplication 是 Qt 中负责管理应用程序的图形界面的基础类。它提供了事件循环和事件处理,处理用户输入、窗口管理等基本功能。它是所有 Qt 图形应用程序的入口点。

2.QGraphicsView:

QGraphicsView 是用于显示 QGraphicsScene 内容的可视化窗口或视图。它允许用户查看和交互 QGraphicsScene 中的图形项。QGraphicsView 提供了用户交互、视图变换、事件处理等功能,以便用户可以浏览和编辑场景中的内容。QGraphicsView 可以显示 QGraphicsScene 的内容,并允许用户与场景中的图形项进行交互。

3.QGraphicsScene:

QGraphicsScene 是一个虚拟的二维平面,用于存储和管理 2D 图形项(QGraphicsItem)。它提供了一个环境,使得图形项可以在其中交互、布局和渲染。QGraphicsScene 可以包含多个图形项,并且允许这些图形项之间相互作用。它相当于一个画布或者场景,用于存储和管理图形元素。

QGraphicsView 和 QGraphicsScene 是 Qt 中用于构建基于图形的用户界面的重要组件,它们通过 Qt GUI(QGuiApplication)来管理窗口和事件处理等基本功能,共同构建出丰富的图形界面应用程序。

二、详细说明

1、QGraphicsView

QGraphicsView 是 Qt 中图形视图框架的一部分,它提供了一个用于在应用程序中显示 QGraphicsScene 的视图窗口。可以将 QGraphicsView 理解为显示 QGraphicsScene 内容的窗口。

以下是一些 QGraphicsView 的主要特性和用途:

1.显示场景内容: 主要用于显示 QGraphicsScene 中的图形项。QGraphicsView 可以显示场景中的所有或部分图形项,允许用户与这些图形项进行交互。

2.支持交互操作: QGraphicsView 提供了用户交互的支持,包括拖动、缩放、平移等。用户可以通过鼠标和键盘来对视图进行操作,以便更好地浏览和编辑场景中的内容。

3.多视图支持: 一个 QGraphicsScene 可以在多个 QGraphicsView 中显示,每个视图可以显示相同或不同的场景内容。这使得可以在不同的视图中以不同的方式查看和编辑同一个场景。

4.视图变换: QGraphicsView 支持视图变换,包括缩放、旋转和平移。这使得用户可以调整视图以查看场景的不同部分,而不仅仅是整个场景。

5.渲染控制: 提供了一些方法和选项,用于控制视图的渲染行为,包括渲染提示(render hints)的设置、视图的抗锯齿设置等。

6.事件处理: QGraphicsView 能够处理鼠标、键盘和其它事件,并将这些事件传递给场景中的相应图形项。这使得可以实现基于图形项的事件处理逻辑。

7.视口更新: QGraphicsView 管理视口更新,可以选择在需要时仅更新可见区域,以提高性能。

总的来说,QGraphicsView 是一个用于在用户界面中显示和交互 QGraphicsScene 的重要组件,为开发图形化应用程序提供了强大的工具。

2、QGraphicsScene

可以将 QGraphicsScene 理解为一个画布或者场景。在 Qt 的图形视图框架中,QGraphicsScene 是一个用于存储和管理 2D 图形项(QGraphicsItem)的场景。这个场景可以被视为一个虚拟的平面,上面可以放置各种图形元素。

类比于绘画,你可以把 QGraphicsScene 想象成一个画布,而图形项则是在画布上绘制的各种元素,如图形、文本、图像等。这种模型允许你以逻辑方式组织和管理这些图形元素,使其在应用程序中可以进行交互、移动、旋转等操作。

QGraphicsScene 还可以与 QGraphicsView 和 QGraphicsItem 一起使用,QGraphicsView 是用于显示场景的视图,而 QGraphicsItem 是场景中的图形元素。通过这个框架,你可以创建出丰富交互的图形用户界面,例如绘图应用程序、图形编辑器等。

3、QGraphicsItem

QGraphicsItem 是 Qt 中用于在 QGraphicsScene 中绘制图形元素的基类。它提供了一个抽象接口,用于创建自定义的可视图形项,并在场景中进行管理和交互。QGraphicsItem 是所有可在场景中显示的图形项的基类,它定义了一系列方法和属性,用于管理图形项的外观、位置、变换和事件处理等功能。

以下是 QGraphicsItem 的一些关键特性和用法:

图形项的基本属性:

位置(Position):图形项的位置是相对于其父级项或场景的坐标系统而言的。

外观(Appearance):通过设置 QPen 和 QBrush,可以定义图形项的边框和填充的样式、颜色等外观属性。

图形项的坐标系统:

图形项的坐标系统是相对于其父级项或者场景的坐标系统而言的。可以使用 scenePos() 获取图形项在场景中的位置。

自定义绘制:

可以重写 paint() 函数,自定义绘制图形项的外观。在 paint() 函数中,可以使用 QPainter 对象进行绘制操作。

事件处理:

图形项可以处理鼠标、键盘和其它事件。可以重写 mousePressEvent、mouseReleaseEvent 等事件处理函数,以实现自定义的交互逻辑。

变换和转换:

图形项可以进行平移、缩放、旋转等变换操作。可以使用 setTransform() 方法来设置图形项的变换矩阵。

碰撞检测:

图形项可以检测与其它图形项的碰撞。可以使用 collidesWithItem()、collidesWithPath() 等方法来进行碰撞检测。

父子关系:

图形项可以组织成父子关系,形成一个树形结构。子项的位置和变换是相对于其父项的。

继承和自定义:

可以通过继承 QGraphicsItem 类来创建自定义的图形项,并实现特定的绘制和交互逻辑。

QGraphicsItem 提供了一个灵活的机制,用于创建自定义的图形元素,并在 QGraphicsScene 中进行管理和交互。通过继承和重写 QGraphicsItem 的方法,可以实现各种复杂的图形元素和交互效果,用于构建丰富的图形用户界面应用程序。

4、QGraphicsRectItem

QGraphicsRectItem 的父类是(QGraphicsItem),用于在 QGraphicsScene 中表示矩形。这是一个简单的图形项类,用于显示和管理矩形的图形元素。同理还有QGraphicsPolygonItem多边形,QGraphicsLineItem直线等都是继承自(QGraphicsItem)。

以下是QGraphicsRectItem的一些关键的特性和使用方式:

创建 QGraphicsRectItem:

可以通过构造函数创建 QGraphicsRectItem,并指定矩形的位置、大小以及父级项(如果有的话):

QGraphicsRectItem *rectItem = new QGraphicsRectItem(x, y, width, height);

设置矩形属性:

可以通过 setRect() 方法设置矩形的位置和大小:

rectItem->setRect(x, y, width, height);

继承和重写:

QGraphicsRectItem 是 QGraphicsItem 的子类,因此可以继承其所有功能。如果需要自定义行为,可以重写虚函数,例如 paint() 以实现自定义的绘制。

图形项的位置和坐标系统:

图形项的位置是相对于其父级项或者场景的坐标系统而言的。可以使用 scenePos() 获取在场景中的位置。

事件处理:

可以重写 QGraphicsItem 的事件处理函数,例如 mousePressEvent 和 mouseReleaseEvent,以便处理鼠标事件。

样式和外观:

可以通过设置 QPen 和 QBrush 来定义图形项的外观,包括边框和填充的颜色、样式等。

交互和动画:

由于 QGraphicsRectItem 是 QGraphicsItem 的子类,可以利用 Qt 提供的图形视图框架的功能,实现与用户的交互以及动画效果。

下面是一个简单的示例,演示了如何创建一个 QGraphicsRectItem 并将其添加到 QGraphicsScene 中:

#include

#include

int main(int argc, char *argv[]) {

QApplication app(argc, argv);

QGraphicsScene scene;

QGraphicsRectItem *rectItem = new QGraphicsRectItem(0, 0, 100, 50);

rectItem->setPos(50, 50); // 设置图形项在场景中的位置

scene.addItem(rectItem);

QGraphicsView view(&scene);

view.show();

return app.exec();

}

这个示例绘制了一个矩形,并将其添加到场景(画布)中,然后使用 QGraphicsView(窗体) 来显示场景。

也可以看我的另一篇文章《qt 坦克大战游戏 GUI绘制-CSDN博客》,介绍的是如何使用以上几种类,绘制一个简单的游戏,坦克大战中的坦克。

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

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

相关文章

15- OpenCV:模板匹配(cv::matchTemplate)

目录 1、模板匹配介绍 2、cv::matchTemplate 3、模板匹配的方法(算法) 4、代码演示 1、模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 它可以在一幅图像中寻找与给定模板最相似的部分。 模板匹配的步骤: &a…

中移(苏州)软件技术有限公司面试问题与解答(4)—— virtio所创建的设备2

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(4)—— virtio所创建的设备1 在上一篇文章中,对于面试所提出的问题“virtio会创建哪些设备?”,有了初步答案,即…

基于python和定向爬虫的商品比价系统实现

目录 前言 一、系统设计 1. 系统需求分析 2. 系统设计思路 二、系统实现 1. 爬虫部分 2. 比价部分 3. 完整系统代码 三、系统优化 1. 多线程爬取 2. 引入数据库 四、总结 前言 商品比价系统是一种可以帮助用户快速找到最优价格商品的系统。本文将介绍如何使用pyth…

开源的API Gateway项目- Kong基于OpenResty(Nginx + Lua模块)

Kong 是一个在 Nginx 内运行的开源 API 网关和微服务抽象层。它是用于处理 API 流量的灵活、可扩展、可插入的工具。 Kong 提供了以下功能: 用户登录:Kong 提供了多种认证插件,像 JWT、OAuth 2.0 等,可以满足用户登录需求。Toke…

Linux---文件系统

在基础IO中,我们所讲的都是对被打开文件的管理,但是不是所有的文件都是被打开的,对那些在磁盘中保存的没有被打开的文件,我们同样也需要管理,这个就像是快递站中等待被人取走的快递,我们需要将它们分门别类…

Java项目:15 springboot vue的智慧养老手表管理系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统共分为两个角色:家长,养老院管理员 框架:springboot、mybatis、vue 数据库:mysql 5.7&…

Fink CDC 1.0 至3.0的从古至今

本文主要分享Flink CDC 1.0 至3.0的发展历程,了解其背后的关键特性和发展趋势,探讨其在大数据领域的影响和价值。 一、CDC概述 CDC是一种用以掌控数据变化的软件架构(技术思路),用于捕获和传递数据库中发生的数据变化。当数据库中发生增(INSERT)/删(DELETE)/改(UPD…

#GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐

区别 核心区别:显存,也被称作帧缓存。独立显卡拥有独立显存,而集成显卡通常是没有的,需要占用部分主内存来达到缓存的目的 集成显卡: 是集成在主板上的,与主处理器共享系统内存。 一般会在很多轻便薄型的…

win11 C盘出现感叹号

Win11系统中,出现本地磁盘上出现黄色感叹号,是BitLocker未关闭或者正在激活导致 解决方案: 鼠标右键点击开始菜单 ,之后选择“Windows终端”管理员 管理-bde状态;# #检查状态 管理-bde?# #查看帮助 Mana…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的,不要乱点 首先使用 docker 搭建 Gitea 服务器,用于管理代码版本,数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

Python如何让程序实现开机自启功能(随Windows启动)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现步骤 📒📝 方法一:使用Windows任务计划程序📝 方法二:添加注册表🎈 创建注册表项🎈 检查注册表项是否成功创建⚓️ 相关链接 ⚓️📖 介绍 📖 为了方便省事,我们很多时候需要给软件添加一个开机自启的功能,…

《微信小程序开发从入门到实战》学习九十三

7.1 视图容器组件 7.1.3 swiper与swiper-item组件 swiper组件的显示效果如下图所示: indicator-dots、indicator-color和indicator-active-color三个属性用于设置swiper组件下方的指示点。设置指示点的颜色时,可以使用HexColor,也可以使用r…

vscode开发FPGA(1)---TEROS_HDL插件报错

一、TerosHDL:modelsim(vlog-66)报错 Error: (vlog-66) Execution of vlib.exe failed 解决办法: 1.新建modelsim工程,并随意编译一个.v文件,将产生的work目录复制到modelsim安装路径下。 2.再将vscode设置verilog>linting>modelsim…

etcd技术解析:构建高可用分布式系统的利器

1. 引言 随着云原生技术的兴起,分布式系统的构建变得愈发重要。etcd作为一个高可用的分布式键值存储系统,在这个领域发挥着至关重要的作用。本文将深入探讨etcd的技术细节,以及如何利用它构建高可用的分布式系统。 2. etcd简介 etcd是一个开…

苗情监测站有什么作用?

苗情监测站是一种针对植物生长情况的监测设施,主要用于实时监测和分析植物生长环境中的各种因素,如温度、湿度、光照、土壤温湿度等,从而为农业生产提供科学的依据和技术支持。 具体来说,苗情监测站的作用包括以下几个方面&#…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

京东云开发者DDD妙文欣赏(3-4)什么时候厨师是Actor

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者DDD妙文欣赏&#xff08;1-2&#xff09;报菜名和化繁为简的创新>> 图8 《餐厅》中的“用例图” &#xff08;01&#xff09; 原文 用例图 赏析 揉一揉眼睛仔细…

全新PHP短网址生成系统,短链接生成系统,URL缩短器系统源码

PHP短网址系统URL缩短器平台&#xff0c;它使您可以轻松地缩短链接&#xff0c;根据受众群体的位置或平台来定位受众&#xff0c;并为缩短的链接提供分析见解。 系统使用了Laravel框架编写&#xff0c;前后台双语言使用&#xff0c;可以设置多域名&#xff0c;还可以开设套餐等…

架构师之路(十六)计算机网络(传输层)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 既然网络层已经…

Linux服务器配置与管理(第一次实验)

实验目的及具体要求 1.熟悉Ubuntu桌面环境和基本操作 2.熟悉命令语法格式 3.掌握Linux各类命令的使用方法 4.熟悉Linux操作环境 实验仪器、设备和材料 笔记本电脑 软件VMware Workstation 17 Player Ubuntu 64 位操作系统 实验内容、步骤及实验数据记录 &#xff08;一…