如何在QGraphicsView中启用QOpenGLWidget的抗锯齿功能?

7

我通过QGraphicsProxyWidget将QOpenGLWidget添加到了QGraphicsView中(不使用setviewport):

QSurfaceFormat format= QSurfaceFormat();
format->setSamples(4); //<== widget show black screen if samples =4, 1 is ok but not antialiasing
m_glWidget->setFormat(format);

MyGraphicsProxyWidget* proxy= new MyGraphicsProxyWidget();
proxy->setWidget(m_glWidget);
//add to scene
scene->addItem(proxy);

我尝试了一些方法,但都没有成功: 如果samples = 4,则glwidget会显示黑屏,但是samples = 1可以正常显示但没有抗锯齿效果。 那么如何在QGraphicsView中启用抗锯齿效果的QOpenGLWidget(由GraphicsproxyWidget添加)?
有帮助吗?谢谢!

1
你尝试过 view.setRenderHints(QPainter::Antialiasing) 吗? - Pavel Strakhov
是的,我以前尝试过(在glwidget和graphicsview中都试过),但没有尝试抗锯齿(但如果将那个glwidget添加到QMainwindow并设置samples = 4,则可以正常工作)。 - lemta
1个回答

5
在QApplication初始化下面,将额外的代码追加到您的main.cpp中。
QSurfaceFormat fmt;
fmt.setSamples(10); 
QSurfaceFormat::setDefaultFormat(fmt);

1
请注意,这必须在小部件或其父级显示之前完成:例如,对于QOpenGLWidget,initializeGL在主app.exec()循环中调用,因此为时已晚。在我的情况下,我在小部件构造函数中完成了它。 - Adrian Maire
1
在每次绘制之前,可能需要显式调用 glEnable(GL_MULTISAMPLE);。我在没有这样做的情况下遇到了问题。 - Adrian Maire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接