【Qt图形视图框架】QGraphicsView分析

简介

  1. QGraphicsView类提供了一个用于显示QGraphicsScene内容的部件。QGraphicsView以可滚动的视口可视化QGraphicsScene的内容。要创建包含几何项目的场景,可以查阅QGraphicsScene的文档。QGraphicsView是Graphics View框架的一部分。
  2. 要可视化一个场景,需要先创建一个QGraphicsView对象,将想要可视化的场景的地址传递给QGraphicsView的构造函数。或者,可以稍后调用setScene()来设置场景。调用show()之后,视图将默认滚动到场景的中心,并显示此时可见的任何项目。例如:
QGraphicsScene scene;
scene.addText("Hello, world!");QGraphicsView view(&scene);
view.show();
  1. 通过使用滚动条或调用centerOn()显式滚动到场景上的任何位置。通过传递一个点到centerOn(),QGraphicsView将滚动其视口以确保该点位于视图中央。如果想要确保某个区域可见(但不一定居中),可以调用ensureVisible()代替。
  2. QGraphicsView可以用来可视化整个场景,也可以只可视化部分场景。可视化的区域在视图首次显示时默认通过调用QGraphicsScene::itemsBoundingRect()自动检测到。要手动设置可视化的区域矩形,可以调用setSceneRect()。这将相应地调整滚动条的范围。请注意,尽管场景支持几乎无限的大小,但滚动条的范围永远不会超过整数范围(INT_MIN, INT_MAX)。
  3. QGraphicsView通过调用render()来可视化场景。默认情况下,项目通过常规QPainter绘制到视口上,并使用默认的渲染提示。要更改QGraphicsView在绘制项目时传递给QPainter的默认渲染提示,可以调用setRenderHints()。
  4. 默认情况下,QGraphicsView为视口部件提供了一个常规的QWidget。可以通过调用viewport()访问此部件,或者通过调用setViewport()替换它。要使用OpenGL进行渲染,只需调用setViewport(new QGLWidget)。QGraphicsView将拥有视口部件的所有权。
  5. QGraphicsView支持仿射变换,使用QTransform。可以通过调用setTransform()传递一个矩阵,或通过调用方便函数rotate()、scale()、translate()或shear()之一。最常见的变换是缩放,用于实现缩放,和旋转。在转换过程中,QGraphicsView将视图的中心保持固定。由于场景对齐(setAligment()),平移视图将没有视觉影响。
  6. 可以使用鼠标和键盘与场景上的项目进行交互。QGraphicsView将鼠标和键盘事件转换为场景事件(继承自QGraphicsSceneEvent的事件),并将它们转发到可视化的场景。最后,处理事件并对它们作出反应的是各个项目。例如,如果点击可选择的项,该项通常会让场景知道它已被选中,并且它将重新绘制自己以显示选择矩形。同样,如果点击并拖动鼠标来移动可移动的项,则是处理鼠标移动并移动自身的项。默认启用项目交互,可以通过调用setInteractive()来切换它。
  7. 还可以通过创建 QGraphicsView 的子类并重新实现鼠标和按键事件处理程序来提供自己的自定义场景交互。为了简化与视图中的项目进行编程式交互的方式,QtGraphicsView提供了映射函数mapToScene()和mapFromScene(),以及项目访问器items()和itemAt()。这些功能允许在视图坐标和场景坐标之间映射点、矩形、多边形和路径,并使用视图坐标在场景中查找项目。

用法

#include <QApplication>  
#include <QGraphicsView>  
#include <QGraphicsScene>  
#include <QGraphicsEllipseItem>  
#include <QGraphicsRectItem>  int main(int argc, char *argv[])  
{  QApplication app(argc, argv);  // 创建一个QGraphicsScene对象  QGraphicsScene scene;  // 创建一个椭圆形的QGraphicsEllipseItem对象,并设置其位置和大小  QGraphicsEllipseItem *ellipse = scene.addEllipse(QRectF(-50, -50, 100, 100));  ellipse->setPos(0, 0);  // 创建一个矩形的QGraphicsRectItem对象,并设置其位置和大小  QGraphicsRectItem *rect = scene.addRect(QRectF(-50, -50, 100, 100));  rect->setPos(150, 0);  // 创建一个QGraphicsView对象,并将QGraphicsScene对象设置为其场景  QGraphicsView view(&scene);  view.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿渲染提示  // 显示QGraphicsView对象  view.show();  return app.exec();  
}

解释

在上面的示例中
首先,创建了一个QGraphicsScene对象,并向其中添加了一个椭圆形的QGraphicsEllipseItem对象和一个矩形的QGraphicsRectItem对象。
然后,创建了一个QGraphicsView对象,并将QGraphicsScene对象设置为其场景。
最后,显示QGraphicsView对象。
注意,在创建QGraphicsView对象时,使用了QPainter::Antialiasing渲染提示,这可以使得显示的图形更加平滑。

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

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

相关文章

python中使用matplotlib绘图

一、背景 当我们在写python程序时&#xff0c;不可避免的需要将数据可视化&#xff0c;也就是绘制出数据的曲线图&#xff0c;以便我们更直观的观察数据间的变化&#xff0c;以及方便对比。此时就要用到matplotlib库了。 matplotlib官方给出的定义是&#xff1a; 翻译过来也就…

云HIS 医院综合运营管理系统源码

医院管理信息系统&#xff08;HIS&#xff09;是医院基本、重要的管理系统&#xff0c;是医院大数据的基础。 基于云计算的云医疗信息系统&#xff08;云HIS&#xff09;。以SaaS的方式提供服务&#xff0c;系统遵循服务化、模块化原则开发&#xff0c;具有强大的可扩展性&…

深度学习-学习率调度,正则化,dropout

正如前面我所说的&#xff0c;各种优化函数也依赖于学习率&#xff0c;保持学习率恒定总是有所限制&#xff0c;在执行梯度下降过程中&#xff0c;我们可以使用各种方法来调节训练过程的学习率&#xff0c;这里只是稍微介绍一下&#xff0c;不会写代码实现的。同时&#xff0c;…

Java 修饰符2

目录 Java 修饰符 访问控制修饰符 默认访问修饰符-不使用任何关键字 私有访问修饰符-private 公有访问修饰符-public 受保护的访问修饰符-protected 访问控制和继承 非访问修饰符 Static修饰符 Final修饰符 Final变量&#xff1a; Final方法 Final类 Abstract修饰…

Apache DolphinScheduler 在奇富科技的首个调度异地部署实践

奇富科技&#xff08;原360数科&#xff09;是人工智能驱动的信贷科技服务平台&#xff0c;致力于凭借智能服务、AI研究及应用、安全科技&#xff0c;赋能金融机构提质增效&#xff0c;助推普惠金融高质量发展&#xff0c;让更多人享受到安全便捷的金融科技服务。作为国内领先的…

【递归】树形结构、list转map

递归 如何用java实现树形结构List树形结构转Map 如何用java实现树形结构 Data public class TsetVo {private Integer roleId;//角色IDprivate Integer menuId;//菜单IDprivate Integer parentId;//上级IDprivate String menuName;//菜单名称private String url;//菜单地址pri…

Open3D (C++) 法线空间采样

目录 一、概述二、代码实现三、结果展示一、概述 法线空间采样的主要步骤如下: 根据点云的法向量信息对点云进行bin划分;在每个bin中进行随机均匀采样,直到采样点数满足要求为止。   本文是在充分了解PCL 法线空间采样算法原理以及源码的基础上,使用C++版本Open3D进行的详…

Java BigDecimal 详解

目录 一、BigDecimal 1、简介 2、构造器描述 3、方法描述 4、使用 一、BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff0c;它…

树莓派(Linux系统通用)交叉编译(环境搭建、简单使用)

概念 交叉编译是指在一台计算机上编译运行在另一台计算机上的程序。&#xff08;编译是指&#xff0c;在一个平台上生成在该平台上的可执行程序&#xff09;通常情况下&#xff0c;编译器和目标平台的架构是不同的&#xff0c;例如&#xff0c;在一台x86平台上编译运行在ARM平…

数据结构-----二叉树的创建和遍历

目录 前言 二叉树的链式存储结构 二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 二叉树的创建 创建一个新节点的函数接口 1.创建二叉树返回根节点 2.已有根节点&#xff0c;创建二叉树 3.已有数据&#xff0c;创建二叉树 前言 在此之前我们学习了二叉树的定义和储…

6种最常用的3D点云语义分割AI模型对比

由于增强现实/虚拟现实的发展及其在计算机视觉、自动驾驶和机器人领域的广泛应用&#xff0c;点云学习最近引起了人们的关注。 深度学习已成功用于解决 2D 视觉问题&#xff0c;然而&#xff0c;由于其处理面临独特的挑战&#xff0c;深度学习技术在点云上的使用仍处于起步阶段…

【Vue3】v-model

v-model 基本用法 prop: modelValue 事件&#xff1a;update:modelValue <!-- App.vue --><template><div><h1>我是父组件</h1><div>isShow: {{ isShow }}</div><div><button click"isShow !isShow">开关&…

nodejs+vue大学食堂订餐系统elementui

可以查看会员信息&#xff0c;录入新的会员信息&#xff0c;对会员的信息进行管理。 网站管理模块对整个网站中的信息进行管理&#xff0c;可以查看会员留在留言栏中的信息&#xff0c;设置网站中的参数等。用户管理模块主要实现用户添加、用户修改、用户删除等功能。 近年来&…

Oracle实现主键字段自增

Oracle实现主键自增有4种方式&#xff1a; Identity Columns新特性自增&#xff08;Oracle版本≥12c&#xff09;创建自增序列&#xff0c;创建表时&#xff0c;给主键字段默认使用自增序列创建自增序列&#xff0c;使用触发器使主键自增创建自增序列&#xff0c;插入语句&…

SpringBoot之文件上传(单文件与多文件上传的使用)

文章目录 前言文件上传总结 前言 SpringBoot的单文件、多文件上传。 文件上传 页面代码/static/form/form_layouts.html <form role"form" th:action"{/upload}" method"post" enctype"multipart/form-data"><div class&q…

MySQL MHA 高可用

目录 1 MySQL MHA 1.1 什么是 MHA 1.2 MHA 的组成 1.3 MHA 的特点 2 搭建 MySQL MHA 2.1 Master、Slave1、Slave2 节点上安装 mysql5.7 2.2 修改 Master、Slave1、Slave2 节点的主机名 2.3 修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf 2.4 在 Mast…

图像采集卡在应用程序的重要性概述

达到最大吞吐量是工业和工厂自动化的关键标准之一。提高传感器分辨率和帧速率有助于实现目标&#xff0c;但会限制带宽&#xff0c;并带来新的传输问题。图像采集卡是将相机连接到PC的最方便、最可靠的方式&#xff0c;在工业环境中使用图像采集卡为高速应用带来了特定的好处&a…

[C++ 网络协议] 异步通知I/O模型

1.什么是异步通知I/O模型 如图是同步I/O函数的调用时间流&#xff1a; 如图是异步I/O函数的调用时间流&#xff1a; 可以看出&#xff0c;同异步的差别主要是在时间流上的不一致。select属于同步I/O模型。epoll不确定是不是属于异步I/O模型&#xff0c;这个在概念上有些混乱&a…

GB28181-流传输方式

1 UDP 服务端开启UDP端口监听&#xff0c;设备端主动向服务端发起流推送 2 TCP被动&#xff08;passive&#xff09; 服务端开启TCP端口监听&#xff0c;设备端主动向服务端发起TCP连接&#xff0c;连接成功&#xff0c;设备推送流数据。 3 TCP主动&#xff08;active&#x…

Centos服务在服务器重启后自启

以Dolphin为例 打开rc.local文件以编辑&#xff1a; sudo vi /etc/rc.d/rc.local在文件中添加您的启动命令。在您的情况下&#xff0c;要添加的命令如下&#xff1a; sh /opt/dolphinscheduler/zookeeper/bin/zkServer.sh start sh /opt/dolphinscheduler/dolphinscheduler/…