我正在尝试在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);
然而,用这位画家绘制的任何东西仍然有锯齿状的边缘。我还需要做什么?
答案 0 :(得分: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);
答案 1 :(得分:8)
您可以尝试在完整的小部件上启用抗锯齿:
QGLWidget::setFormat(QGLFormat(QGL::SampleBuffers));
答案 2 :(得分:3)
这个问题相当陈旧,但我仍然在Google上找到了它。 您不应再使用QGLWidget
。使用较新的QOpenGLWidget
。这会将场景渲染到屏幕外,而不是创建一个原生的OpenGL窗口,这会导致调整布局大小的各种问题。这段代码适合我。把它放在你的QGraphicsView
构造函数中:
QOpenGLWidget* gl = new QOpenGLWidget;
QSurfaceFormat fmt;
fmt.setSamples(8);
gl->setFormat(fmt);
setViewport(gl);
setRenderHint(QPainter::Antialiasing);
答案 3 :(得分:0)
如果您使用PyQt5,则通常会子类SHA1
来构建自己的GPU驱动的小部件。要打开抗锯齿功能,请查看下面的代码段:
QOpenGLWidget()
注意:谢谢@Timmmm的回答。在查看您的C ++代码片段时,我找到了PyQt5解决方案。