2013-10-24 27 views
0

我正在使用PyQt及其绑定OpenGL的简单3D查看器。我想,实现下面的用户操作(如例如在SolidWorks):在PyQt中使用Qt.MidButton和Qt.MidButton + Qt.ControlModifier来旋转和平移/ pan

  1. 平移/翻译:使用组合ctrl + middle mouse button (pressed)
  2. 旋转:middle mouse button (pressed)

和移动鼠标。该代码是:

def mousePressEvent(self, event): 
    self.last_pos = event.posF() 

def mouseMoveEvent(self, event): 
    dxy = event.posF() - self.last_pos 
    dx = dxy.x()/self.width() 
    dy = dxy.y()/self.height() 
    # rotate - 
    if event.buttons() & Qt.MidButton: 
     self.camera.rotate(dx, dy) 
    # translate/pan 
    elif (event.buttons() & Qt.MidButton) and (event.modifiers() & Qt.ControlModifier): 
     self.camera.pan(dx, dy) 
    # zoom 
    self.last_pos = event.posF() 

我的问题是,当我按下ctrl然后middle mouse button两者(self.camera.rotate(dx, dy)self.camera.pan(dx, dy))功能被执行,但我想只是翻译的对象(或多个)。我想问你是否有办法修改代码,以便翻译和旋转可以与愿望键组合一起工作。现在我没有任何想法。

回答

1

这两个操作都需要中间按钮。但只有平移/平移需要Ctrl,所以用它来在它们之间切换:

if event.buttons() & Qt.MidButton: 
    if event.modifiers() & Qt.ControlModifier: 
     self.camera.pan(dx, dy) 
    else: 
     self.camera.rotate(dx, dy) 
+0

解决了这个问题。谢谢。 – avstenit