似乎QOpenGLWidget::paintEvent
和QOpenGLWidget::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
绘制)的高度较小,并且字母看起来像被压缩,抗锯齿也无法正常工作。您可以在图片上看到它,在文本上看,不要注意彩色区域。所以我有两个问题:
1)尽管渲染(不调整大小)效果很好,但我是否会错过
paintEvent
中的某些调用?2)我应该将哪些调用添加到覆盖的
resizeEvent
中,这些调用在基类resizeEvent
中进行了调用?UPD:我想出一个简单的想法只是打开qopenglwidget.cpp源代码,并查看其工作方式并根据我的需要进行修复,我有一天会尝试一下。
最佳答案
看起来您必须在代码之前或之后调用原始的resizeEvent。
void GlWidget::resizeEvent(QResizeEvent* event)
{
//your code...
QOpenGLWidget::resizeEvent(event);
}