QGraphicsView怎么用
时间: 2023-03-13 10:20:40 浏览: 170
QGraphicsView是Qt GUI中的一个2D图形视图控件,它可以显示和编辑2D图形元素。要使用QGraphicsView,首先需要创建一个QGraphicsScene对象,然后将它传递给QGraphicsView的构造函数。然后,可以通过调用QGraphicsScene的addItem()函数添加2D图形元素,然后在QGraphicsView中查看和编辑它们。
相关问题
qt鼠标悬停图片放大,QGraphicsView使用鼠标滚轮在鼠标位置放大和缩小
您可以通过以下步骤实现在鼠标悬停时放大图片:
1. 为需要放大的图片添加一个QGraphicsPixmapItem对象。
2. 监听QGraphicsView的鼠标移动事件,并在事件处理函数中获取鼠标位置。
3. 在鼠标移动事件处理函数中,计算鼠标位置是否在图片所在的矩形区域内。如果在,则将图片的缩放比例增加一定值,然后重新设置QGraphicsPixmapItem的缩放比例。
4. 在鼠标离开事件处理函数中,将图片的缩放比例还原为初始值。
以下是一个示例代码:
```python
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class MyView(QGraphicsView):
def __init__(self, parent=None):
super(MyView, self).__init__(parent)
self.setMouseTracking(True)
self.setScene(QGraphicsScene(self))
self.pixmap_item = QGraphicsPixmapItem(QPixmap("image.png"))
self.scene().addItem(self.pixmap_item)
self.zoom_factor = 1.0
def mouseMoveEvent(self, event):
pos = self.mapToScene(event.pos())
if self.pixmap_item.boundingRect().contains(pos):
self.zoom_factor += 0.1
self.pixmap_item.setTransformOriginPoint(event.pos())
self.pixmap_item.setScale(self.zoom_factor)
super(MyView, self).mouseMoveEvent(event)
def leaveEvent(self, event):
self.zoom_factor = 1.0
self.pixmap_item.setScale(self.zoom_factor)
super(MyView, self).leaveEvent(event)
```
要实现使用鼠标滚轮在鼠标位置放大和缩小,请按照以下步骤操作:
1. 监听QGraphicsView的鼠标滚轮事件,并在事件处理函数中获取鼠标位置。
2. 计算鼠标位置在场景坐标系中的位置,并以此为中心进行缩放。
3. 通过设置QGraphicsView的缩放比例实现放大和缩小。
以下是一个示例代码:
```python
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QTransform
from PyQt5.QtCore import Qt
class MyView(QGraphicsView):
def __init__(self, parent=None):
super(MyView, self).__init__(parent)
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setMouseTracking(True)
self.setScene(QGraphicsScene(self))
self.zoom_factor = 1.0
def wheelEvent(self, event):
pos = self.mapToScene(event.pos())
delta = event.angleDelta().y()
zoom_delta = delta / 1200.0
self.zoom_factor += zoom_delta
if self.zoom_factor < 0.1:
self.zoom_factor = 0.1
elif self.zoom_factor > 10.0:
self.zoom_factor = 10.0
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setTransformationAnchor(QGraphicsView.NoAnchor)
self.setResizeAnchor(QGraphicsView.NoAnchor)
self.scale(1+zoom_delta, 1+zoom_delta)
self.centerOn(pos)
def centerOn(self, pos):
viewport_rect = self.viewport().rect()
scene_rect = self.scene().sceneRect()
center = QTransform().map(pos).toPoint()
dx = viewport_rect.center().x() - center.x()
dy = viewport_rect.center().y() - center.y()
new_center = self.mapToScene(viewport_rect.center() + QPoint(dx, dy))
if scene_rect.contains(new_center):
self.setSceneRect(scene_rect)
super(MyView, self).centerOn(new_center)
```
希望这可以帮助到您!
qt鼠标悬停图片放大_QGraphicsView使用鼠标滚轮在鼠标位置放大和缩小
可以通过以下代码实现QGraphicsView使用鼠标滚轮在鼠标位置放大和缩小的功能:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene
class MyGraphicsView(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
self.setRenderHint(QPainter.Antialiasing, True)
self.setRenderHint(QPainter.SmoothPixmapTransform, True)
self.setDragMode(QGraphicsView.ScrollHandDrag)
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setMouseTracking(True)
self.setInteractive(True)
self.setScene(QGraphicsScene(self))
def wheelEvent(self, event):
zoomInFactor = 1.25
zoomOutFactor = 1 / zoomInFactor
oldPos = self.mapToScene(event.pos())
if event.angleDelta().y() > 0:
zoomFactor = zoomInFactor
else:
zoomFactor = zoomOutFactor
self.scale(zoomFactor, zoomFactor)
newPos = self.mapToScene(event.pos())
delta = newPos - oldPos
self.translate(delta.x(), delta.y())
```
在这个实现中,我们首先创建了一个继承自QGraphicsView的MyGraphicsView类,并重写了wheelEvent方法,在该方法中实现了鼠标滚轮缩放的功能。具体来说,我们首先获取鼠标滚轮滚动的方向,然后根据方向缩放视图。接着获取鼠标滚轮滚动前后在场景中的位置差,然后平移视图以使放大和缩小的中心点在鼠标位置。
阅读全文