0

我正在使用 PyQt 及其对 OpenGL 的绑定来开发一个简单的 3D 查看器。我想实现以下用户操作(例如在solidworks中):

  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)) 函数时,但我只想翻译对象。我想问你有没有一种方法可以修改代码,翻译和旋转将与期望的组合键一起工作。现在我没有任何想法。

4

1 回答 1

1

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

if event.buttons() & Qt.MidButton:
    if event.modifiers() & Qt.ControlModifier:
        self.camera.pan(dx, dy)
    else:
        self.camera.rotate(dx, dy)
于 2013-10-24T21:48:48.330 回答