在QGLWidget上使用QPainter时,启用抗锯齿需要哪些步骤?

Ell*_*ott 13 opengl qt

我试图在QGLWidget上绘制基本形状.我试图启用抗锯齿来平滑线条,但它不起作用.

这就是我现在正在尝试的:

QGLWidget *widget = ui->renderWidget;

QPainter painter;

widget->makeCurrent();
glEnable(GL_MULTISAMPLE);
glEnable(GL_LINE_SMOOTH);

painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);

painter.begin(widget);
Run Code Online (Sandbox Code Playgroud)

然而,用这个画家绘制的任何东西仍然有锯齿状的边缘.我还需要做什么?

Ell*_*ott 13

我找到了解决方案.在调试另一个问题时,我在调试输出中发现了一些消息,即在调用begin()之前无法设置renderhints.

以下作品:

QGLWidget *widget = ui->renderWidget;

QPainter painter;

widget->makeCurrent();
glEnable(GL_MULTISAMPLE);
glEnable(GL_LINE_SMOOTH);

painter.begin(widget);

painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);
Run Code Online (Sandbox Code Playgroud)


Mar*_*say 8

您可以尝试在完整的Widget上启用抗锯齿:

QGLWidget::setFormat(QGLFormat(QGL::SampleBuffers));
Run Code Online (Sandbox Code Playgroud)

  • 完美的工作.注意,你仍然需要`setRenderHint(QPainter :: Antialiasing)`. (2认同)

Tim*_*mmm 5

这个问题已经很老了,但我仍然在Google上找到了。您不应该再使用QGLWidget了。使用更新的QOpenGLWidget。这会将场景渲染到屏幕外,而不是创建一个本机的OpenGL窗口,该窗口会导致布局大小调整产生各种问题。该代码对我有用。将其放在您的QGraphicsView构造函数中:

QOpenGLWidget* gl = new QOpenGLWidget;
QSurfaceFormat fmt;
fmt.setSamples(8);
gl->setFormat(fmt);
setViewport(gl);
setRenderHint(QPainter::Antialiasing);
Run Code Online (Sandbox Code Playgroud)