2016-11-18 112 views
1

我有下面的类:Qt的QOpenGLWidget wheelEvent奇怪的行为

class Curve2DOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core { 
Q_OBJECT 
public: 

    Curve2DOpenGLWidget(QWidget* parent = nullptr); 
    ~Curve2DOpenGLWidget(); 

    void initializeGL() override; 
    void resizeGL(int width, int height) override; 
    void paintGL() override; 
    void NativePaintGL(); 

protected: 
    void mousePressEvent(QMouseEvent *event) override; 
    void mouseReleaseEvent(QMouseEvent *event) override; 
    void mouseMoveEvent(QMouseEvent *event) override; 
    void wheelEvent(QWheelEvent *event) override; 

}; 

我想用wheelEvent放大/在我的场景缩小。

下面是代码:

void Curve2DOpenGLWidget::wheelEvent(QWheelEvent* event) { 
    QOpenGLWidget::wheelEvent(event); 
    float numStep = (event->angleDelta().y()/8)/15; 
    m_camera.MoveFront(numStep * 0.1f); 
} 

据我想要做什么,但是当我在同一时间移动鼠标和鼠标滚轮使用此事件不叫。

此代码适用于我实现的所有其他小部件(QGraphicsView等)。我想知道在QOpenGLWidget上是否有特殊的功能?

我无法解释这种行为......如果它可以帮助,我的工作在Ubuntu 14.04 LTS

回答

0

从Qt的当按下鼠标按钮出现documentation

鼠标事件或在 小部件中发布,或者移动鼠标光标时发布。当鼠标按钮被按下

鼠标移动事件才会发生,除非 鼠标跟踪已与 QWidget的启用:: setMouseTracking()。

所以,你在你的构造函数需要setMouseTracking(真)

+0

setMouseTracking(真)不解决我的问题。当我使用鼠标滚轮时,wheelEvent()不会被调用,而是同时移动它。 –