gpt4 book ai didi

c++ - Qt QOpenGLWidget wheelEvent 奇怪的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:29 25 4
gpt4 key购买 nike

我有以下类(class):

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

最佳答案

我确实遇到了同样的问题。

在我的例子中,它是一个基于 QTimer 的渲染循环,它以 100 FPS 的速度更新 4 个 QOpenGLWidget 和窗口的标题栏(这实际上非常占用 CPU)。
它没有出现在 Windows 上,而是出现在 Linux 上。

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

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

关于c++ - Qt QOpenGLWidget wheelEvent 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40673477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com