2017-03-09 3 views
0

QGraphicsScene을 만들고 QGraphicsView에 표시하고 싶습니다. 마우스 가운데 버튼으로 화면을 스크롤하여 왼쪽 버튼으로 고무 밴드를 선택하고 싶습니다. 하지만 고무 밴드 선택을 왼쪽 마우스 버튼으로 만 표시하는 방법을 모르겠습니다.QGraphicsView : 고무 밴드 선택을 왼쪽 마우스 버튼에만 표시하는 방법은 무엇입니까?

여기 내 코드입니다 :

# -*- coding: utf-8 -*- 

import os, sys 

from PyQt5 import QtWidgets, QtCore, QtGui, QtSvg 

class MegaSceneView(QtWidgets.QGraphicsView): 
    def __init__(self, parent=None): 
     super(MegaSceneView, self).__init__(parent) 
     self._scale_factor = 1.0 

     self._scale_by = 1.2 
     self.setAcceptDrops(True) 

     self.setRenderHint(QtGui.QPainter.Antialiasing) 
     self.setMouseTracking(True) 
     self.setRubberBandSelectionMode(QtCore.Qt.IntersectsItemShape) 
     self.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag) 

     self._prev_mouse_scene_pos = None 


    def mousePressEvent(self, event): 
     if (event.buttons() & QtCore.Qt.MidButton) != QtCore.Qt.NoButton: 
      self._prev_mouse_scene_pos = (event.pos()) 
     super(MegaSceneView, self).mousePressEvent(event) 

    def mouseReleaseEvent(self, event): 
     super(MegaSceneView, self).mouseReleaseEvent(event) 
     self._prev_mouse_scene_pos = None 

    def mouseMoveEvent(self, event): 
     super(MegaSceneView, self).mouseMoveEvent(event) 

     if (event.buttons() & QtCore.Qt.MidButton) != QtCore.Qt.NoButton: 
      cur_mouse_pos = (event.pos()) 
      if self._prev_mouse_scene_pos is not None: 
       delta_x = cur_mouse_pos.x() - self._prev_mouse_scene_pos.x() 
       delta_y = cur_mouse_pos.y() - self._prev_mouse_scene_pos.y() 

       self.horizontalScrollBar().setValue(self.horizontalScrollBar().value() - delta_x) 
       self.verticalScrollBar().setValue(self.verticalScrollBar().value() - delta_y) 

      self._prev_mouse_scene_pos = (event.pos()) 

if __name__ == "__main__": 

    app = QtWidgets.QApplication(sys.argv) 

    mega_view = MegaSceneView() 

    mega_scene = QtWidgets.QGraphicsScene(-500, -500, 1000, 1000) 
    # mega_scene = QtWidgets.QGraphicsScene() 

    rect_item_1 = QtWidgets.QGraphicsRectItem(-30, -20, 60, 40) 
    mega_scene.addItem(rect_item_1) 

    rect_item_2 = QtWidgets.QGraphicsRectItem(-20, -30, 40, 60) 
    mega_scene.addItem(rect_item_2) 
    rect_item_2.setPos(300, 200) 

    mega_view.setScene(mega_scene) 
    mega_view.show() 

    sys.exit(app.exec_()) 

나는 고무 밴드가 왼쪽 버튼 만 표시하기 위해 무엇을 추가해야합니까?

답변

0

기본 제공 방법이 없습니다. 그래픽보기에 mousePressEvent, mouseMoveEventmouseReleaseEvent의 하위 클래스를 만들고 가시적 인 고무 밴드를 직접 만들어야합니다. (QRubberBand이 잘 작동합니다.) 사용자가 마우스를 놓으면 고무 밴드 범위를 장면 좌표로 변환하고 QGraphicsScene::setSelectionArea을 호출해야합니다.

관련 문제