似乎QOpenGLWidget::paintEventQOpenGLWidget::resizeEvent做不需要的glClear

我不想在每次paintGL调用之前清除屏幕,但Qt会自动执行,因此我已经覆盖了QOpenGLWidget::paintEvent,如下所示:

void GlWidget::paintEvent(QPaintEvent* event)
{
   makeCurrent();
   paintGL();
   paintWithQPainter();
}

似乎工作正常。

然后我尝试覆盖QOpenGLWidget::resizeEvent(我不需要在这里调用glViewPort):
void GlWidget::resizeEvent(QResizeEvent* event)
{
    // QWidget::resizeEvent(event); // i've also tried this, doesn't help
    resizeGL(event->size().width(), event->size().height());
}

调整窗口大小时,出现了问题,例如:如果降低窗口的高度,则绘制的文本(在QPainter之后使用paintGL绘制)的高度较小,并且字母看起来像被压缩,抗锯齿也无法正常工作。您可以在图片上看到它,在文本上看,不要注意彩色区域。

c++ - Qt + OpenGL:如何正确覆盖QOpenGLWidget::resizeEvent?-LMLPHP

所以我有两个问题:

1)尽管渲染(不调整大小)效果很好,但我是否会错过paintEvent中的某些调用?

2)我应该将哪些调用添加到覆盖的resizeEvent中,这些调用在基类resizeEvent中进行了调用?

UPD:我想出一个简单的想法只是打开qopenglwidget.cpp源代码,并查看其工作方式并根据我的需要进行修复,我有一天会尝试一下。

最佳答案

看起来您必须在代码之前或之后调用原始的resizeEvent。

void GlWidget::resizeEvent(QResizeEvent* event)
{
    //your code...
    QOpenGLWidget::resizeEvent(event);
}

10-08 09:28