2012-10-03 2 views
2

항목 크기가 변경되지 않지만 항목 간의 거리가 확대되는 장면을 구현하는 동안 직사각형과 텍스트 "A"를 그리는 다음 코드로이 문제가 발생했습니다. 이제 직사각형 항목에 ItemIgnoresTransformations 플래그를 설정하면 확대를 통해 사각형이 사라집니다 (마우스 버튼을 클릭하고 사각형 주위로 드래그). 그러나 그것은 텍스트의 경우에는 발생하지 않습니다. 또한 fitInView가 설정 한 새로운 뷰포트 영역은 내가 요청한 것과 매우 다릅니다.ItemIgnoresTransformations가 켜져있을 때 QGraphicsView의 fitIn 문제 문제

import sys 
from PyQt4 import QtCore, QtGui 

class GV(QtGui.QGraphicsView): 
    def __init__(self, *args, **kwargs): 
     QtGui.QGraphicsView.__init__(self, *args, **kwargs) 

    def mousePressEvent(self, event): 
     pos = QtCore.QPoint(event.pos()) 
     self.startPos = pos 

    def mouseReleaseEvent(self, event): 
     pos = QtCore.QPoint(event.pos()) 
     self.endPos = pos 
     rect = QtCore.QRect(self.startPos, self.endPos) 
     sceneRect = self.mapToScene(rect).boundingRect() 
     print 'Selected area: viewport coordinate:', rect, \ 
      ', scene coordinate:', sceneRect 
     self.fitInView(sceneRect) 
     print 'new viewport in scene coordinates:', \ 
      self.mapToScene(self.viewport().geometry()).boundingRect() 

class Scene(QtGui.QGraphicsScene): 
    def __init__(self, *args, **kwargs): 
     QtGui.QGraphicsScene.__init__(self, *args, **kwargs)  
     self.itemA = QtGui.QGraphicsSimpleTextItem('A') 
     self.itemA.setPos(20, 20) 
     self.itemA.setFlag(QtGui.QGraphicsItem.ItemIgnoresTransformations, True) 
     self.addItem(self.itemA) 
     self.itemB = QtGui.QGraphicsRectItem(30, 50, 20, 20) 
     self.addItem(self.itemB) 
     self.itemB.setFlag(QtGui.QGraphicsItem.ItemIgnoresTransformations, True) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    widget = QtGui.QMainWindow() 
    scene = Scene() 
    view = GV(scene, widget) 
    widget.setCentralWidget(view) 
    widget.show() 
    app.exec_() 

설명을 이해할 수 있습니다!

답변

3

사실 직사각형은 사라지지 않습니다. 그러나 그것은 이상하게 움직인다.

self.itemB = QtGui.QGraphicsRectItem(30, 50, 20, 20) 

이 줄은 원하는 내용이 아닐 수 있습니다. 항목을 만들고 (30, 50)에서 시작하는 사각형/사각형을 로컬 좌표에 놓습니다. 그런 다음 장면에 추가합니다. 이렇게하면 (0, 0)에 고정 된 항목이 제공되고 (50, 70)까지 확장되지만 오른쪽 하단에만 사각형이 그려집니다 20x20.

ItemIgnoresTransformations으로 설정하면 항목이 확대/축소의 경우 일반 변형을 수행 할 수 없습니다. 장면이 확대되어 아이템이이 변환을 무시하면 종류가 "축소"됩니다. 그러나 여전히 여전히 (0, 0)에 고정되어 있으며 사각형은 오른쪽 아래에 있으므로 그려진 사각형은 왼쪽 위를 향해 이동합니다.

해결 방법은 간단합니다. 로컬 좌표로 사각형을 만들지 마십시오. 즉, 사각형은 (0, 0)부터 시작해야하며 명시 적으로 배치해야합니다. 어떤 번역이 :

self.itemB = QtGui.QGraphicsRectItem(0, 0, 20, 20) 
self.itemB.setPos(30, 50) 
+0

고마워, 그 "사라지는"문제에 대한 작동합니다. 하지만이 경우 로컬 좌표가 장면 좌표라고 생각했습니다. 눈에 띄지는 않습니다. – subhacom

관련 문제