【Qt 图形视图框架】QGraphics分析及使用

news2024/9/27 17:36:24

组成

Qt 图形视图框架分为三部分:场景、视图、图元。
在这里插入图片描述

场景对于程序来说,场景是不可见的,是一个抽象的管理图形项的容器。 可以向场景中添加图形项,比如:圆形、矩形、三角形等等
此外,还可以获取场景中的某个图形项

视图提供绘图的视图组件,用于显示场景中的内容。 需要注意两点
第一点:视图大于场景
场景在视图的中间部分显示,也可以设置视图的Alignment属性控制场景在视图中的显示位置
第二点:视图小于场景
视图只能显示场景的一部分内容,但是会自动提供滚动条在整个场景内移动

图形项一些基本的图形元件,例如:椭圆、矩形等等
基类是:QGraphicsItem
对于这些基本的图形项也有现成的图形类
QGraphicsItem被这些类继承
在这里插入图片描述

坐标

在这里插入图片描述

场景坐标
等价于QPainter的逻辑坐标,一般以场景的中心为原点,单位是像素。 场景是所有图形项的基础坐标,描述了每个顶层图形项的位置。

视图坐标
与设备坐标相同,是物理坐标,一般以左上角为圆点,单位是像素。
视图的坐标只与widget或者视口有关,而与场景无关,所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射成场景坐标,以便程序中交互

图元坐标
局部逻辑坐标,一般以图件的中心为原点
每个图形项在场景里都有一个位置坐标,是由QGraphicsItem::scenePos给出的。

使用

 // 创建场景对象
QGraphicsScene scene;
scene.addText("Hello, world!");
// 创建视图对象
QGraphicsView view(&scene);
// 显示
view.show();

下面是自定义item的绘制及显示范围

  class SimpleItem : public QGraphicsItem
{
public:
    QRectF boundingRect() const
    {
        qreal penWidth = 1;
        return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
                      20 + penWidth, 20 + penWidth);
    }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget)
    {
        painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
    }
};

至此,认识结束,此后,记录跟多的使用,包括视图、图元的移动、缩放、复制、粘贴、导出等。

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

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

相关文章

games101 作业2

题目 光栅化一个三角形 1. 创建三角形的 2 维 bounding box。 2. 遍历此 bounding box 内的所有像素(使用其整数索引)。然后,使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。 3. 如果在内部,则将其位置处的插值深度值 (…

GICv3学习

GICv3学习 参考文档: 《corelink_gic600_generic_interrupt_controller_technical_reference_manual_100336_0106_00_en》 《IHI0069H_gic_architecture_specification》 《ECM0495013B_GIC_Stream_Protocol》 一、GICv3寄存器接口 接口如下图所示&#xff1a…

手搭手入门Mybatis-Plus配置多数据源

https://baomidou.com/ Mybatis-Plus介绍 为简化开发而生 MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无…

Python 多线程概述

视频版教程 Python3零基础7天入门实战视频教程 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每一个运行中的程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流,每一个顺序执行流就是一个线…

指针笔试题

目录 指针笔试题 NO1. NO2. NO3. NO4. NO5.✔ NO6. NO7. NO8.✔ 今天接着继续指针练习。🙂🙂🙂 指针笔试题 NO1. //指针的类型 //转化后的类型 //解引用访问根据指针类型访问几个字节 //整型在内存中的存储------小端存储 //*解引…

项目上线部署--》服务器部署流程(二)安装Nginx、Node.js、MySQL

阅读本篇文章前请先阅读项目上线部署--》服务器部署流程(一) 目录 🌟安装Nginx 先登录远程服务器,安装依赖包 下载并解压包 🌟安装Node.js 安装nodejs进程管理工具 🌟安装MySQL 🌟写在最…

透过《眼睛的故事》:需求为何成为纪录片的“价值锚点”?

我们正处在一个内容过载、追求流量的时代。 对于观众来说,这是幸运的,也是不幸的。一方面,相比以前能接受到的内容指数级增长,自己的视野无限扩大,但另一方面,“流量思维”下粗制滥制的内容不在少数&#…

一百七十八、ClickHouse——海豚调度执行ClickHouse的.sql文件

一、目的 由于数仓的ADS层是在ClickHouse中,即把Hive中DWS层的结果数据同步到ClickHouse中,因此需要在ClickHouse中建表,于是需要海豚调度执行ClickHouse的.sql文件 二、实施步骤 (一)第一步,海豚建立Cl…

JavaWeb的基本概念

一、Web基本概念 Web的基本结构: 1.客户端的概述 1.1. 客户端的作用 与用户进行交互,用于接收用户的输入(操作)、展示服务器端的数据以及向服务器传递数据 1.2. 常见的客户端 PC端网页: 移动端: Iot设备: 2…

基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将gamma2.2和gamma1/2.2的数据分别导入到matlab进行对比: 2.算法运行软件版本 matlab2022a 3.部分核心程序 timescale 1ns / 1ps //…

MyBatisPlus中使用Mybatis方式操作数据库。

说明 MyBatisPlus中,可以使用 Mybatis 方式操作数据库。在 Mapper.xml 中,编写 SQL 来实现比较复杂的操作。 一般比较复杂的逻辑,需要多表联合查询,比较适合直接写SQL。 MybatisPlus比较适合单表操作。 PS:本示例只…

使用stelnet进行安全的远程管理

1. telnet有哪些不足? 2.ssh如何保证数据传输安全? 需求:远程telnet管理设备 用户定义需要在AAA模式下: 开启远程登录的服务:定义vty接口 然后从R2登录:是可以登录的 同理R3登录: 在R1也可以查…

10.前端打包与nginx部署

文章目录 打包部署nginx替换html 打包 首先,确保你的项目是可以运行的,以若依为例,运行npm run dev 是可以正常运行起来前端的。然后前端的打包命令是 # 构建测试环境 npm run build:stage # 构建生产环境 npm run build:prod打包好之后&am…

华为云香港S3云服务器性能测评_99元一年租用价格

华为云香港S3云服务器1核2G1M带宽99元一年性能测评,配置为S3云服务器1核2G1M带宽,S系列热卖机型,适用于个人建站、普通web应用等负载较低场景,系统盘为高IO40G系统盘,华为云百科分享华为云香港云服务器配置费用&#x…

HUAWEI华为MateBookD15笔记本2019款i5独显非触屏(BoB-WAH9P)原装出厂Win10系统2004

原厂系统自带显卡、网卡、声卡、指纹等所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序 链接:https://pan.baidu.com/s/1sB7dCXlvw9deSiVeY8BvDg?pwd49a6 提取码:49a6

笔记01:第一行Python

NameError 名字不含特殊符号(只能是英文、数字、下划线、中文等)名字区分大小写名字先定义后使用 SyntaxError 不符合Python语法书写规范除了语法成分中的保留拼写错误输出中文符号if、for、def等语句末尾忘记冒号 IdentationError 缩进错误&#x…

算法刷题 week4

目录 1.斐波那契数列题目题解(递推 滚动变量) O(n) 剑指offer 10 - II 青蛙跳台阶问题题目题解 10.旋转数组的最小数字题目题解(二分) O(n) 1.斐波那契数列 题目 题解 (递推 滚动变量) O(n) 这题的数据范围很小,我们直接模拟即可。 当数据范围很大时&#xff0…

【学习笔记】Java 一对一培训(2.1)Java基础语法

【学习笔记】Java 一对一培训(2.1)Java基础语法 关键词:Java、Spring Boot、Idea、数据库、一对一、培训、教学本文主要内容含Java简介、Java基础语法、Java对象和类、Java基本数据类型、Java变量类型、Java修饰符计划2小时完成,…

广义模态控制实例

广义模态控制实例 1. 原系统2. 调节器设计3. 加入调节器后的系统 在广义模态控制一文中,笔者介绍了广义模态控制的思路以及算法。本文将举一个简单的广义模态控制的例子,以加深理解。 1. 原系统 取原开环系统的传递函数为 G ( s ) 2 15 s 2 s G ( {…

2、ARM处理器概论

一、ARM处理器概述 1、ARM的含义 ARM(Advanced RISC Machines)有三种含义,一个公司的名称、一类处理器的通称、一种技术 ARM公司: 成立于1990年11月,前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内…