简要说明

QGraphicsScene场景区域,可在构造QGraphicsScene对象时设定,也可通过函数setSceneRect设定。QGraphicsScene场景区域中坐标原点的位置,会影响到图形项的坐标设定,进而影响图形项在场景中的显示位置。以将图片显示在中心位置为例,分两种情况说明。

1、场景坐标原点在显示窗口左上角

使用函数setSceneRect将场景区域的坐标原点设定在QGraphicsView显示窗口的左上角,区域为QGraphicsView整个显示窗口。代码如下:

#include "SceneRect.h"
#include <QGraphicsPixmapItem>
SceneRect::SceneRect(QWidget *parent): QMainWindow(parent), m_pMyScene(NULL), m_pPixmapItem(NULL)
{ui.setupUi(this);ui.graphicsView->setStyleSheet("QGraphicsView{background-color: rgb(80, 80, 80);}");m_pMyScene = new QGraphicsScene(ui.graphicsView);ui.graphicsView->setScene(m_pMyScene);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(loadPixmap()));
}SceneRect::~SceneRect()
{if (m_pPixmapItem){delete m_pPixmapItem;m_pPixmapItem = NULL;}if (m_pMyScene){delete m_pMyScene;m_pMyScene = NULL;}
}void SceneRect::loadPixmap()
{QRect viewRect = ui.graphicsView->geometry();m_pPixmapItem = new QGraphicsPixmapItem(QPixmap("picture.bmp"));m_pMyScene->setSceneRect(1, 1, viewRect.width() - 2, viewRect.height() - 2); //将坐标原点设在显示窗口的左上角m_pMyScene->addRect(1, 1, viewRect.width() - 4, viewRect.height() - 4, QPen(Qt::red)); //红色方框标明场景区域m_pPixmapItem->setPos((viewRect.width() - m_pPixmapItem->pixmap().width()) / 2,(viewRect.height() - m_pPixmapItem->pixmap().height()) / 2); //设定图片在场景中的坐标m_pMyScene->addItem(m_pPixmapItem);
}

效果如下:

(0,0)为场景坐标原点

2、场景坐标原点在显示窗口中心点

使用函数setSceneRect将场景区域的坐标原点设定在QGraphicsView显示窗口的中心点,区域为QGraphicsView整个显示窗口。代码如下:

void SceneRect::loadPixmap()
{QRect viewRect = ui.graphicsView->geometry();m_pPixmapItem = new QGraphicsPixmapItem(QPixmap("picture.bmp"));m_pMyScene->setSceneRect(-viewRect.width() / 2, -viewRect.height() / 2, viewRect.width() - 2, viewRect.height() - 2); //将坐标原点设在显示窗口的中心点m_pMyScene->addRect(-viewRect.width() / 2, -viewRect.height() / 2, viewRect.width() - 4, viewRect.height() - 4, QPen(Qt::red)); //红色方框标明场景区域m_pPixmapItem->setPos(- m_pPixmapItem->pixmap().width()/ 2,- m_pPixmapItem->pixmap().height() / 2); //设定图片在场景中的坐标m_pMyScene->addItem(m_pPixmapItem);
}

效果如下:


图形项QGraphicsPixmapItem自身的坐标系是以图像左上角为坐标原点,x、y轴分别向右、向下递增,故设定图像在场景中的坐标,其实是设定图像左上角在场景中的坐标。

稍加整理方便大家参考,如有错误请指正,谢谢!

QGraphicsScene设置SceneRect相关推荐

  1. Qt工作笔记-QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?

    转载地址: https://blog.csdn.net/tianyuan521521/article/details/46290525 前言 最近一直使用QGraphicsView框架在我的一个实际项 ...

  2. 基于QGraphicsView、QGraphicsScene、自定义QGraphicsItem的小demo(正矩形、旋转矩形及圆形)

    网上有很多关于这三个的资料,这方面的功能不做过多的描述,仅仅将在做小Demo过程中遇到的问题做下记录,下面是Demo的界面图: Demo的初衷是不想每次使用QGraphicsView和QGraphic ...

  3. 在Qt中使用回调函数替代信号槽

    前言 在Qt中传数据,我们使用了一个信号和槽系统,但这并不意味着不能使用旧的经过验证的方法,即使用 CallBack回调函数功能. 事实上使用 CallBack 功能比信号和槽要快一些.并且当发送信号 ...

  4. Qt图形视图框架:QGraphicsScene详解

    一.描述 1.场景提供了一个用于管理大量2D图形项的平面.该类充当图形项的容器. 它与视图一起用于可视化2D曲面上的图形图形项. 2.场景没有自己的视觉外观,只负责管理图形项. 3.场景的最大优势之一 ...

  5. 图形视图(02):【类】QGraphicsScene [官翻]

    文章目录 详述 事件处理和传播 公共类型 enum ItemIndexMethod enum SceneLayer 属性 backgroundBrush: QBrush bspTreeDepth: i ...

  6. QGraphicsScene的坐标矫正

    在用一个QGraphicsScene做一个工具发现他的坐标我们经常用到的那样,而是原点在左上角的位置,正x方向朝右,而正y方向是朝下的,这就需要做两个工作,一个是将坐标原点放到试图的正中间而不是左上角 ...

  7. QGraphicsScene Class

    目录 使用 构造函数 枚举 属性 属性方法 添加项目 事件 信号 槽 使用 头文件: #include <QGraphicsScene> 配置: QT += widgets 初始版本: Q ...

  8. QGraphicsScene 中的场景保存成透明图片

    这里弄出两段关键代码: 一个是保存图片的函数: void UICanvasView::saveToImage(const QString& imagePath) {m_pScene->S ...

  9. QGraphicsScene 的简单理解--关于手册的简要翻译

    文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...

最新文章

  1. vsftpd的配置文件路径,是在哪里指定的?
  2. 【趣说】IT人的职场艰难,全藏在气氛组里!
  3. centOS6.5下openfoam-2.4.0安装及并行实现
  4. 700 页的机器学习笔记火啦,图文生动形象
  5. 基于虚拟账号的邮件系统之×××
  6. android反编译apk命令,APK反编译关键命令及步骤
  7. HTML-坐标的含义,以及变换的使用
  8. Dvbbs 更换论坛置顶图片
  9. 奥克兰大学计算机领域优势,奥克兰大学世界排名及优势专业排名解析
  10. GMK4045-ASEMI光伏逆变器二极管GMK4045
  11. 离散数学10__第5章 关系与函数_关系的性质_自反对称传递
  12. 中兴算法挑战赛-比特派:跳高
  13. 和菜鸟一起学算法之三分法求极值问题
  14. TortoiseSVN控制台提交命令
  15. D23:Multiple of 3 Or 5(3或5的倍数,翻译+题解)
  16. 基础知识之二——STA相关的基本定义
  17. Python网络爬虫专业级框架_scrapy
  18. 南理工计算机学院吉祥物,我们想要一个吉祥物,就差一个设计者了!
  19. 大牛程序员用Java手写JVM:刚好够运行 HelloWorld
  20. 微信小程序开发01(安装与简单使用)

热门文章

  1. 山东大学2023操作系统实验2
  2. 关于单片机内存解释的整理
  3. 如何快速升级 Cocos Shader 版本,以简易水shader为例
  4. SolidWorks软件降本增效管理方案
  5. 最小4k计算机组成,计算机组成原理第4章第三讲.ppt
  6. mDNS 原理的简单理解
  7. Linux 用户与用户组关系
  8. Wear OS手表应用开发教程之-手腕手势-上下甩动手表事件
  9. python 使用全局变量_Python教程之全局变量用法
  10. COMSOLE/FreeCAD接触对使用