QGraphicsPixmapItem类提供了一个 pixmap 项,您可以将其添加到 QGraphicsScene 中。
要设置项目的像素图,请将QPixmap传递给QGraphicsPixmapItem的构造函数,或调用setPixmap()函数。 pixmap()函数返回当前的像素图。
QGraphicsPixmapItem使用pixmap的可选alpha蒙版,以合理地实现boundingRect(),shape()和contains()。
像素图是在项目的 坐标处绘制的,由
offset() 返回。您可以通过调用 setOffset() 来更改图形偏移。
您可以通过调用 setTransformationMode() 来设置像素图的转换模式。默认情况下,使用FastTransformation,它提供了快速,平滑的缩放比例。SmoothTransformation 在 painter 上启用SmoothPixmapTransform,其质量取决于平台和视口。结果通常不如直接调用 QPixmap::scale() 好。调用 transformationMode() 以获取该项目的当前转换模式。
QGraphicsPixmapItem([parent=None]):其中 parent 即 QGraphicsItem 的实例。
下面写一个使用案例:
from xinet import QtWidgets, QtCore, QtGui, RectItem
from xinet.run_qt import run
QColor = QtGui.QColor
QPen = QtGui.QPen
QGraphicsPixmapItem = QtWidgets.QGraphicsPixmapItem
class MainWindow(QtWidgets.QGraphicsView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 设定视图尺寸
#self.resize(600, 600)
# 创建场景
self.scene = QtWidgets.QGraphicsScene()
# x1, y1, w, h
self.item = RectItem(20, 25, 120, 120) # 可塑性矩形
self.scene.addItem(self.item)
self.scene.addItem(RectItem(200, 250, 120, 120))
pix_item = QGraphicsPixmapItem(self.item)
pix_item.setPixmap(QtGui.QPixmap('w.jpg'))
pix_item.setOffset(30, 50)
self.photo = QtGui.QImage("test.jpg")
self.init_Ui()
def drawBackground(self, painter, rect):
super().drawBackground(painter, rect)
if self.photo.isNull():
self.setBackgroundBrush(QColor(0, 0, 200, 100)) # 默认背景颜色
else:
# 设置场景的边界矩形,即可视化区域矩形
_w = self.photo.width()
_h = self.photo.height()
self.setSceneRect(0, 0, _w, _h)
#self.setBackgroundBrush(QColor(0, 0, 200, 30)) # 默认背景颜色
painter.drawImage(0, 0, self.photo)
def init_Ui(self):
# 设定视图的场景
self.setScene(self.scene)
self.fitInView(self.scene.sceneRect(), QtCore.Qt.KeepAspectRatio)
self.setViewportUpdateMode(self.FullViewportUpdate) # 消除重影 移动重影
self.setDragMode(self.RubberBandDrag) # 设置可以进行鼠标的拖拽选择
# 这里是左上角方式显示
self.setAlignment(QtCore.Qt.AlignLeft |
QtCore.Qt.AlignTop)
if __name__ == '__main__':
run(MainWindow)
效果:
