gpt4 book ai didi

c++ - 将 QOpenGLWidget 与 QGraphicsView 一起使用 : viewport not updating?

转载 作者:行者123 更新时间:2023-11-28 02:23:04 25 4
gpt4 key购买 nike

我想使用 openGL 来渲染 QGraphicsview 项目,这样我就可以节省 CPU 资源。在文档中,它指出我必须做的是添加一个 QOpenGLWidget 作为 QGraphicsview 的视口(viewport)。这就是我正在做的:

QOpenGLWidget *glWidget = new QOpenGLWidget();
ui->drawScreen->setViewport(glWidget);
ui->drawScreen->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
ui->drawScreen->update();

(ui->drawScreen 是我的QgraphicsView)

当我在屏幕上绘制某些东西时,它可以正确绘制,但在一定时间后我想用淡入淡出动画删除该项目。这不会引起屏幕更新,即当我这样做时:

double opacity = 1.0 - ((elapsed - annotationFrameOut) / (double)fadeOutFrames);
(*i)->setOpacity(opacity);

(*i​​) 是一项。

或者这个:

scene.removeItem(item);

在视觉上,没有任何反应。只有当我调整屏幕大小时,项目才会消失,或者显示正确的不透明度以防它褪色。

此外,当我移动一个项目时,位置不会消失,因此会产生拖动效果。选择矩形或输入文本项时也是如此(边界矩形被多次绘制)。

这似乎是一个简单的更新问题,但我不知道该怎么做,我似乎也没有在网上找到这个问题。我正在使用 Windows。

感谢您的宝贵时间。

编辑:举例说明问题的图片。蓝色矩形是永远不会删除的选择矩形(除非我重新调整窗口大小) Blue rectangles are the selection rectangle that is never removed (unless I re-size the window)

编辑 2:使用 QGLWidget

的代码
QGLWidget *viewPort = new QGLWidget(QGLFormat(QGL::SampleBuffers | QGL::AlphaChannel), ui->drawScreen);

ui->drawScreen->setViewport(viewPort);
ui->drawScreen->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
ui->drawScreen->update();

编辑 3:在我的应用程序中,我在 QGraphicsView 下方播放了一段视频。每次出现新帧时,我都会通过更新 QLabel 来显示视频。

我尝试更新 QGraphicsPixmapImageQPixmap 而不是使用 QLabel。如果现在我在这张图片上画图,我猜是因为图片在不断更新。但在图片之外它仍然不起作用。

最佳答案

显式的 update() 调用是不必要的。这看起来像一个 Qt 错误。 QGraphicsView does some magicQGLWidget 以使其用作视口(viewport)。最有可能的是,这种魔法尚未移植到 QOpenGLWidget 中。

作为解决方法,请改用QGLWidget

关于c++ - 将 QOpenGLWidget 与 QGraphicsView 一起使用 : viewport not updating?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658176/

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