Python PyQt4如何检测控件按下+鼠标滚轮

4
我正在开发一款应用程序。我希望有一个缩放选项。为了实现这个功能,我想让程序在同时点击控制键和滚动鼠标时进行缩放(向上滚动进行放大,向下滚动进行缩小)。我已经做了很多搜索和阅读,但只找到了获取控制键按下和鼠标单击事件的方法,而没有找到鼠标滚动事件的方法。我也找到了一种获取鼠标滚动的方法,但不能只通过控制键按下来实现。-并忽略所有其他按键。
请问有人可以提供帮助吗?
1个回答

5

这要取决于您应用程序的结构。 获取滚动事件的一种方法是将wheelEvent处理程序添加到您的小部件中。

def wheelEvent(self, QWheelEvent):
    modifiers = QtGui.QApplication.keyboardModifiers()
    if modifiers == QtCore.Qt.ControlModifier:
        # do your processing

另一种方法可能是在您想要拦截滚动事件的组件中安装一个事件过滤器。
component.viewport().installEventFilter(self)  

也许你需要在组件本身上安装事件过滤器而非在视口上安装。
而且,self有一个名为eventFilter的函数,如下所示:
 def eventFilter(self, qobject, event):
        if (event.type() == QtCore.QEvent.Wheel) :
            modifiers = QtGui.QApplication.keyboardModifiers()
            if modifiers == QtCore.Qt.ControlModifier:
                #do some scaling stuff
                return True
            return False
        else:
            # standard event processing
            return False

希望这能帮到你。

谢谢,但我怎么知道滚轮事件是向上滚动还是向下滚动? - Cheyn Shmuel
事件.delta()的符号(请参见http://doc.qt.io/qt-4.8/qwheelevent.html) - Marc Van Daele
你使用哪种方法?是wheelEvent处理程序还是eventFilter?使用前一种方法(以及第二种方法,当事件过滤器未正确安装时),可能会出现只在视图顶部接收到向上滚动事件,而在视图底部接收到向下滚动事件的情况。你能确认这种行为吗?你还可以指出你的组件类型以及是否在视口上安装了事件过滤器吗? - Marc Van Daele
你在哪个对象上定义了这个函数?它包含哪些(可滚动的)视图?可能有一个可滚动的容器在内部消耗了向下滚动事件。如果是这样,你将不得不采用第二种方法(使用eventFilter)。 - Marc Van Daele
我在我的QMainWindow上使用了这个事件处理程序。我的QScrollArea是我的中央小部件。 - Cheyn Shmuel
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接