Qt 使用 QGraphicsPixmapItem

参考:QGraphicsPixmapItem

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]):其中 parentQGraphicsItem 的实例。

下面写一个使用案例:

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)

效果:

你可能感兴趣的:(Qt 使用 QGraphicsPixmapItem)