QT QGraphicsScene / QGraphicsView中 sceneRect 使用详细说明

QT QGraphicsScene / QGraphicsView中 sceneRect 使用详细说明接触QT不久,发现QT的GraphicsView框架坐标使用和平常不一样,尤其sceneRect的作用。官方文档关于这部分介绍真是蛋疼,网上说的也寥寥。没法自己研究了一下,其实这块内容QT设计的很方便,只是文档讲解的太烂,总结如下:qt的GraphicsView框架主要用于大量2d绘制的场合。qtgraphicsview框架主要由三部分组成:View(QGraphicsView)…

大家好,欢迎来到IT知识分享网。

接触QT不久,发现QT的Graphics View框架坐标使用和平常不一样,尤其sceneRect的作用。
官方文档关于这部分介绍真是蛋疼,网上说的也寥寥。没法自己研究了一下,其实这块内容QT设计的很方便,只是文档讲解的太烂,总结如下:

qt的Graphics View 框架主要用于大量2d绘制的场合。qt graphics view 框架主要由三部分组成:View(QGraphicsView),Scene(QGraphicsScene)、Item(QGraphicsItem)。这也是一个典型的Model/View模式应用。

1)sceneRect的作用:

sceneRect和显示密切相关,QGraphicsView使用sceneRect来决定如何显示QGraphicsScene。

1、如果sceneRect的宽度(width)大于等于QGraphicsView视口宽度:

      QGraphicsView调整View的宽度为sceneRect的宽度大小。(大于的情况会自动添加滚动条);

     此时View的左上角对应sceneRect的左上角,View的右下角对应sceneRect右下角。该情况下QGraphicsView的alignment不起作用。

     高度判断同理!

    如:View窗口:左上角(0,0)  宽=1800,高=1000 ;

        sceneRect: 左上角(-200, -100),宽=2000,高=1100;

       View的窗口会通过滑动条扩展为 宽=2000,高=1100;(阴影部分)

 

QT QGraphicsScene / QGraphicsView中 sceneRect 使用详细说明

2、如果sceneRect的宽度(width)小于QGraphicsView视口宽度:

QGraphicsView根据 alignment/setAlignment设定来显示,默认让sceneRect居中(Qt::AlignCenter),这对于显示单张图片很好用。  也可以使用QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop)设置为左上角对齐,画图比较好用。

高度判断同理!

2)sceneRect的确定:

QGraphicsView有sceneRect/setSceneRect函数,Scene也有sceneRect/setSceneRect函数,如何确定View的sceneRect呢?

查下源代码,一目了然,它们的关系如下:
  1、如果 View设定了sceneRect,则使用View的sceneRect;(尽量使用View的setSceneRect函数,尤其多视口显示只能如此)
  2、如果 View没有设定 sceneRect,则使用 Scene设置的 sceneRect;
  3、如果Scene没有设置 sceneRect,则使用Scene的外包围盒(boundRect);(默认使用)

 

3)常用方法

1)默认情况下,QGraphicsView使用Scene外包,QGraphicsView居中对齐(Qt::AlignCenter), 所以 添加到Scene的Item会自动居中。如果Scene只有一个Item,居中这样很不错。

2)如果scene添加多个Item,默认行为居中行为就比较怪异了,最好让scene和view的原点对齐。使用QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop)设置为左上角对齐。如果添加的item使得包围盒大于View的宽高,滚动条自动出现。如果永远都不希望出现滚动条需要将sceneRect设置为比View的宽高小的值。

如:QGraphicsView::setSceneRect(0, 0, 10, 10); // 后面是10, 100都无所谓,设置了就行,只要不大于view的宽高就不会出现滚动条。当然超出View宽高(注意不是sceneRect)的Item是看不见的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21212.html

(0)
上一篇 2024-01-21 14:15
下一篇 2024-01-25 11:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信