PyQt5中的 QGraphics View 小于场景 Scene 时,会出现 ScrollBar 滚动条。
在某些场景下我们是不需要滚动条出现,比如:带有 move 功能的工具时,仅仅需要移动 scene 中的 Item 即可。

1. 关闭滚动条的显示

首先,掩耳盗铃。针对上述问题,滚动条依然和鼠标滚轮相关,但是它看不见了,大不了不用滚轮。

# 设置滚动步进,无用
# self.view.horizontalScrollBar().setSingleStep(0)
# self.view.verticalScrollBar().setSingleStep(0)
# 关闭滚动条的显示
self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

2. 彻底解决问题

前面引用中加粗字体已经给出了问题的原因,那么只需要保证ViewRect大于SceneRect即可。故解决办法如下:

# 获取当前view的Rect
view_rect = self.view.contentsRect()
# 计算scene的Rect,因为我将图片图元居中显示,所以我将偏移计算在左右、上下居中位置
s_x = int(abs(view_rect.width() - self.image_w) / 2)
s_y = int(abs(view_rect.height() - self.image_h) / 2)
self.view.setSceneRect(-s_x, -s_y, view_rect.width(), view_rect.height())
                    PyQt5中的QGraphics View小于场景Scene时,会出现ScrollBar滚动条。在某些场景下我们是不需要滚动条出现,比如:带有move功能的工具时,仅仅需要移动scene中的Item即可。1. 关闭滚动条的显示首先,掩耳盗铃。针对上述问题,滚动条依然和鼠标滚轮相关,但是它看不见了,大不了不用滚轮。# 设置滚动步进,无用# self.view.horizontalScrollBar().setSingleStep(0)# self.view.verticalScrollBar(.
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
python3
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)       # 关闭垂直滚动条
self.setHorizontal
				
当在QGraohicsView中添加了滚动条可以通过改变滚动条的位置来查看view的不同位置处的元素。那么当改变了查看位置时,我们往往需要获取当前界面显示区域的场景坐标或视图坐标。可以用一下的方式来获取这两种坐标。 QRect viewport_rect(0,0,use_view->viewport()->width(),use_view->viewport()->height()); QRectF visable_scene = use_view->mapToScene(
当在使用QGraphicsView时,创建一个QGraphicsView大小为 800 * 600 ,创建一个QGraphicsScene大小为800 * 1000时,view自动出现了滚动条。 默认的滚动条位置在中间的位置。 设置滚动条位置 pview->verticalScrollBar()->setSliderPosition(0);  pview->horizontal
QGraphicsView提供显示QGraphicsScene的功能,它继承自QAbstractScrollArea,因此它还是一个带滚动条的窗口,这样可以实现只场景的一部分。还可以创建多个QGraphicsView来显示同一个QGraphicsScene,类似 QTableView、QTreeView和QListView的显示,官方专业的描述是“多个视图可以观察一个场景”。 2、常用接口 setScene:设置场景QGraphicsScene show:默认情况下,视图将滚动到场景的中心并显示此
一、Graphics View框架结构的主要特点 (1)在Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 (2) Graphics View支持事件传播体系结构,可以使图元在场景(scene) 中的交互能力提高1倍,图元能够处理键盘事件和鼠标事件。其中,鼠标事件包括鼠标被按下、移动、释放和双击,还可以跟踪鼠标的移动。 (3)在Graphics View框架中,通过二元空间划分树(Binary Space Pritining, BSP) 提供快速的图元
### 回答1: PyQt5中的QGraphicsView是一个用于显示和编辑图形的小部件。它可以用于创建交互式的图形应用程序,如绘图编辑器和游戏。QGraphicsView提供了一个可滚动的视图窗口,可以在其中显示QGraphicsScene中的图形项。您可以使用QGraphicsView来缩放、平移和旋转图形项,以及捕获鼠标和键盘事件。要使用QGraphicsView,您需要创建一个QGraphicsScene,并将其设置为QGraphicsView的场景。然后,您可以将图形项添加到场景中,并使用QGraphicsView显示它们。 ### 回答2: PyQt5是一个强大的工具包,其中包括了许多图形界面相关的模块。其中,QGraphicsViewPyQt5中的一个非常常用的图形视图框架,它提供了一个可以展示并且编辑图形呈现的服务。QGraphicsView从图形界面的一个角度来说,它是用来画出2D的图形,这些图形可以是由PyQt5包中图形元素组成的。 使用QGraphicsView的第一步就是创建一个QGraphicsScene对象并将其设置为QGraphicsView的画布。QGraphicsScene对象类似于一个容器,它可以用于存储和组织QGraphicsItem和QGraphicsWidget。QGraphicsItem是最基本的图形元素,它可以让我们向QGraphicsScene添加不同类型的图形像素,如折线、矩形、多边形、椭圆等等。 QGraphicsView类提供了一个在场景中浏览这些图形元素的功能。可以通过拖动、选择和缩放的形式查看不同的图形元素。一些常见的操作包括缩放、旋转、移动和变换,这些都是通过QGraphicsView类中的一些方法来实现的。QGraphicsView类其实是将QGraphicsScene的内容呈现到一个窗口,该窗口是由QGraphicsView对象实现。 另外,QGraphicsView类还提供了一些其他常见的操作,如鼠标移动、单击、双击、按下、松开等操作,以便我们响应相应的事件。我们可以通过重写这些方法来实现与场景交互的自定义处理逻辑。 总之,QGraphicsView是一个非常强大的工具,可以提供图形界面上呈现和编辑图形元素的功能。通过掌握QGraphicsView的一些常见操作和方法,我们可以快速地创建出漂亮的图形界面程序,并让它们交互起来。 ### 回答3: PyQt5是Python语言的一个GUI工具包,它使用Qt库开发而成。其中,QGraphicsViewPyQt5的一个组件,它可以用来创建一个可视化的图形界面,显示各种复杂的图形元素,包括线条、矩形、圆形、文本、图片等。 使用QGraphicsView,我们可以轻松创建交互性强、视觉效果好的图形应用程序。以下是关于QGraphicsView的一些具体用法说明: 1. 创建QGraphicsView对象 首先,我们需要导入PyQt5库,并创建一个QGraphicsView对象,来显示我们想要展示的图形元素。例如: - from PyQt5.QtWidgets import QGraphicsView - view = QGraphicsView() 2. 添加场景(Scene) 接下来,我们需要创建一个或多个场景(Scene),来放置我们要展示的图形元素。在QGraphicsView中,场景是存放图形项(QGraphicsItem)的容器,可以理解为一个画布。我们可以使用QGraphicsScene类创建一个场景对象,并将其添加到QGraphicsView中。例如: - from PyQt5.QtWidgets import QGraphicsScene - scene = QGraphicsScene() - view.setScene(scene) 3. 添加图形项 在场景中,我们可以添加各种图形项,例如,矩形、椭圆、文本、图片等等。在QGraphicsView中,图形项是指由QGraphicsItem派生出来的类,如QGraphicsRectItem、QGraphicsEllipseItem、QGraphicsTextItem等。我们可以使用这些类来创建图形项,并将它们添加到场景中。例如: - from PyQt5.QtWidgets import QGraphicsRectItem - item1 = QGraphicsRectItem(0, 0, 100, 100) - item2 = QGraphicsRectItem(150, 150, 100, 100) - scene.addItem(item1) - scene.addItem(item2) 4. 图形项的属性设置 在添加图形项后,我们可以对其进行属性设置,例如,设置边框线条的颜色、线宽、线型,设置填充的颜色,设置旋转角度、缩放因子等等。例如: - item1.setPen(QPen(Qt.red, 2, Qt.SolidLine)) - item1.setBrush(QColor(255, 0, 0, 50)) - item1.setRotation(45) - item2.setScale(0.5) 5. 事件处理 在QGraphicsView中,我们可以通过事件机制来处理用户的交互行为,例如鼠标点击、鼠标移动、键盘事件等等。我们可以重写各种事件函数(例如mousePressEvent、mouseMoveEvent、keyPressEvent等)来实现自己的逻辑。例如: - def mousePressEvent(self, event): - item = self.scene().itemAt(event.pos()) - item.setBrush(QColor(0, 255, 0, 50)) 以上就是QGraphicsView的使用过程。通过组合使用QGraphicsView、QGraphicsScene和QGraphicsItem,我们可以轻松创建出丰富多彩的图形应用程序。