【发布时间】:2018-10-27 21:09:52
【问题描述】:
似乎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 不是问题,resizeEvent 的任务是通知小部件发生变化并调用paintEvent,paintEvent 必须使用逻辑并创建合适的绘画所以如果你不显示你是如何绘画我们将能够为您提供帮助。
-
@eyllanesc 我已经为你添加了 UPD。
-
什么是
someRect?请花点时间提供minimal reproducible example -
@eyllanesc someRect 只是一个
QRect someRect (10, 10, 200, 50); -
您可以显示您通过更新获得的图片以显示问题。