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)
效果: