2016-11-18 45 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()不會被調用,而是同時移動它。 –