C++ Qt QOpenGLWidget wheelEvent奇怪的行为

C++ Qt QOpenGLWidget wheelEvent奇怪的行为,c++,qt,C++,Qt,我有以下课程: class Curve2DOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core { Q_OBJECT public: Curve2DOpenGLWidget( QWidget* parent = nullptr ); ~Curve2DOpenGLWidget(); void initializeGL() override; void resiz

我有以下课程:

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上有什么特别的事情要做吗

我无法解释这种行为。。。如果有帮助的话,我正在使用Qt的ubuntu14.04 LTS

鼠标事件发生在鼠标内按下或释放鼠标按钮时 控件,或者当鼠标光标移动时

仅当按下鼠标按钮时,才会发生鼠标移动事件, 除非已使用启用鼠标跟踪 QWidget::setMouseTracking()


因此,在构造函数中需要setMouseTracking(true)

我也遇到了同样的问题

在我的例子中,这是一个基于
QTimer
的渲染循环,它以100fps的速度更新了4
QOpenGLWidget
s和窗口的标题栏(实际上相当占用CPU)。
它没有在Windows上显示,而是在Linux上显示

qoglwidgets的更新事件和鼠标移动事件在事件循环中的优先级可能高于控制盘事件。车轮事件似乎没有被丢弃,而是累积起来,与下一个»通过«的事件一起到达


幸运的是,用例允许用事件驱动的实现替换这个渲染循环,从而避免了这个问题

请参见中的Qt::AA_CompressHighFrequencyEvents和Qt::AA_CompressTabletEvents


这些是Qt5中的新属性。

setMouseTracking(true)不能解决我的问题。当我使用鼠标滚轮并同时移动它时,不会调用wheelEvent()。设置这些属性无法修复此行为。