似乎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());
}
当我调整窗口大小时,会出现问题,例如:如果我减小窗口的高度,则绘制的文本(在 paintGL
之后使用 QPainter
绘制)会减少高度和字母看起来像是被压缩的,而且抗锯齿功能也无法正常工作。你可以看图片,看文字,不要注意彩色区域。
所以我有两个问题:
1) 虽然渲染(不调整大小)工作正常,但我是否错过了重写的 paintEvent
中的一些调用?
2) 我应该将哪些调用添加到重写的 resizeEvent
中,这些调用在基类 resizeEvent
中调用?
UPD:我想出了一个简单的想法,只是打开 qopenglwidget.cpp 源代码,看看它是如何工作的,并根据我的需要修复它,有一天我会尝试一下。
最佳答案
看起来您必须在代码之前或之后调用原始的 resizeEvent 。
void GlWidget::resizeEvent(QResizeEvent* event)
{
//your code...
QOpenGLWidget::resizeEvent(event);
}
关于c++ - Qt + OpenGL:如何正确覆盖 QOpenGLWidget::resizeEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53026299/