2016-02-04 56 views
1
 import sys 

from PyQt4 import QtGui,QtCore 
x=-40 
y=0 
z=0 
class MyView(QtGui.QGraphicsView): 


    def __init__(self): 
     QtGui.QGraphicsView.__init__(self) 
     self.scene=QtGui.QGraphicsScene(self) 
     self.item=[] 
     self.item2=[] 
     myLine=QtGui.QGraphicsLineItem(-10,20,20,20) 
     myLine.setCursor(QtCore.Qt.CrossCursor) 
     self.scene.addItem(myLine) 
     myLine.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 

     self.setScene(self.scene) 

    def keyPressEvent(self,event): 
     global x 
     global y 
     global z 
     if event.key()==QtCore.Qt.Key_Left: 

      self.item.append(QtGui.QGraphicsRectItem(x,-10,40,40)) 
      self.scene.addItem(self.item[y]) 
      x=x+10 
      self.item[y].setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
      y=y+1 
     elif event.key()==QtCore.Qt.Key_Right: 

      self.item2.append(QtGui.QGraphicsEllipseItem(x,-10,40,40)) 
      self.scene.addItem(self.item2[z]) 
      x=x+10 
      self.item2[z].setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
      z=z+1 
    def mousePressEvent(self , event): 
     self._start=event.pos() 
    def mouseReleaseEvent(self,event): 
     start = QtCore.QPointF(self.mapToScene(self._start)) 
      end = QtCore.QPointF(self.mapToScene(event.pos())) 
      self.scene.addItem(
        QtGui.QGraphicsLineItem(QtCore.QLineF(start, end))) 

if __name__=='__main__': 
    app=QtGui.QApplication(sys.argv) 
    view= MyView() 
    view.show() 
    sys.exit(app.exec_()) 

,你可以看到我不能夠移動,因爲鼠標按下事件的矩形和橢圓它畫一條線怎麼不理mousePressEvent超過GraphicsItem(PyQt4的)

我希望能夠到拖動以及當在圖形項按畫線

應該拖到其他明智的,應該吸取線

回答

1

使用if itemAt(event.pos) is None:mousePressEvent()以確定是否發生過QGraphicsItem點擊。在該方法中設置狀態標誌self.__dragging = the_item,以便您可以在mouseMoveEvent()mouseReleaseEvent()中確定是拖動對象(self.__dragging is not None)還是繪製線條(self.__dragging is None)。