Изменить окно просмотра в полном разрешении - PullRequest
0 голосов
/ 02 июля 2018

У меня есть QGraphicsView с шириной и длиной, отличной от растрового изображения, которое я хочу сохранить. Когда я сохраняю растровое изображение, я хочу, чтобы оно было в полном разрешении.

def save(self):
    painter = QtGui.QPainter()
    painter.setViewport(rect.toRect())
    pixmap = QtGui.QPixmap().grabWidget(self)
    pixmap_scaled = pixmap.scaled(1275, 2004, QtCore.Qt.KeepAspectRatio)
    pixmap_scaled.save('sample.png')

когда я делаю это, изображение не в полном разрешении.

Код ниже - это код fitinview для изображения с высоким разрешением, подходящий для qgraphicsview

    def fitInView(self, scale=True):
        rect = QtCore.QRectF(self._photo.pixmap().rect())
        if not rect.isNull():
            self.setSceneRect(rect)
            if self.hasPhoto():
                unity = self.transform().mapRect(QtCore.QRectF(0, 0, 1, 1))
                self.scale(1 / unity.width(), 1 / unity.height())
                viewrect = self.viewport().rect()
                scenerect = self.transform().mapRect(rect)
                factor = min(viewrect.width() / scenerect.width(),
                         viewrect.height() / scenerect.height())
                self.scale(factor, factor)
            self._zoom = 0

My QGraphicsView

class FrontGraphics(QtGui.QGraphicsView):
photoClicked = QtCore.pyqtSignal(QtCore.QPoint)

def __init__(self, parent):
    super(FrontGraphics, self).__init__(parent)
    self._zoom = 0
    self._empty = True
    self.setMouseTracking(True)
    self._scene = QtGui.QGraphicsScene(self)
    self._photo = QtGui.QGraphicsPixmapItem()
    self._scene.addItem(self._photo)
    self.setScene(self._scene)
    self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
    self.setResizeAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
    self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    # self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(30, 30, 30)))
    self.setFrameShape(QtGui.QFrame.NoFrame)
    # self.setFixedSize(350, 600)
    self._idpicture = IDPicture(QtCore.QPointF(50, 50))
    self._scene.addItem(self._idpicture)
    self._studentid = StudentId()
    self._scene.addItem(self._studentid)
    self._fullname = FullName()
    self._scene.addItem(self._fullname)
    self._section = Section()
    self._scene.addItem(self._section)

Мой QWidget

class FrontWindow(QtGui.QWidget):
def __init__(self):
    super(FrontWindow, self).__init__()
    self.viewer = FrontGraphics(self)
    self.btnLoad = QtGui.QToolButton(self)
    self.btnLoad.setText('Load image')
    self.btnLoad.clicked.connect(self.loadImage)
    self.btnClear = QtGui.QToolButton(self)
    self.btnClear.setText('Clear')
    self.btnClear.clicked.connect(self.clearImage)
    self.btnPixInfo = QtGui.QLabel(self)
    self.setFixedWidth(500)
    self.setFixedHeight(800)
    self.setGeometry(500, 300, 500, 300)
    # Arrange layout
    VBlayout = QtGui.QVBoxLayout(self)
    VBlayout.addWidget(self.viewer)
    HBlayout = QtGui.QHBoxLayout()
    HBlayout.setAlignment(QtCore.Qt.AlignLeft)
    # HBlayout.addWidget(self.btnLoad)
    HBlayout.addWidget(self.btnClear)
    HBlayout.addWidget(self.btnPixInfo)
    VBlayout.addLayout(HBlayout)

Я попытался ответить здесь Grabwidget, чтобы получить полный вид, даже если он увеличен в , но не может этого сделать

...