QT 在 QGraphicsView 中使用 opengl 不能够刷新的解决方案
时间: 2024-02-21 13:01:15 浏览: 149
Qt QGraphicsView 控件实现标尺和刻度先效果
在使用Qt的QGraphicsView和OpenGL时,可能会遇到不能刷新的情况,这是因为OpenGL的绘制是在QGraphicsView的paintEvent事件之外完成的。为了解决这个问题,可以使用QGraphicsView的viewport()函数获取OpenGL的绘制区域,并在OpenGL绘制完成后手动刷新。具体操作如下:
1. 重写QGraphicsView的paintEvent事件,并在其中调用viewport()函数获取OpenGL绘制区域:
```c++
void MyGraphicsView::paintEvent(QPaintEvent *event)
{
QOpenGLWidget* glWidget = qobject_cast<QOpenGLWidget*>(viewport());
if (glWidget)
{
glWidget->update();
}
QGraphicsView::paintEvent(event);
}
```
2. 在OpenGL完成绘制后,手动刷新viewport():
```c++
void MyOpenGLWidget::paintGL()
{
// OpenGL绘制代码
...
QOpenGLWidget* glWidget = qobject_cast<QOpenGLWidget*>(parentWidget());
if (glWidget)
{
glWidget->update();
}
}
```
这样就可以解决QGraphicsView和OpenGL不能刷新的问题。
阅读全文