我试图在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)
您可以尝试在完整的Widget上启用抗锯齿:
QGLWidget::setFormat(QGLFormat(QGL::SampleBuffers));Run Code Online (Sandbox Code Playgroud)
这个问题已经很老了,但我仍然在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)