2015-02-09 139 views
4

我已经通过QGraphicsProxyWidget添加QOpenGLWidget到的QGraphicsView(不要使用setviewport):如何在QGraphicsView中为QOpenGLWidget启用抗锯齿功能?

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); 

我已经尝试了一些方法,但不工作: glwidget显示黑屏如果样本= 4,但样品= 1好的但不是抗锯齿。 那么如何在QGraphicsView中为QOpenGLWidget(由GraphicsproxyWidget添加)启用抗锯齿?

有帮助吗?谢谢!

+1

你试过'view.setRenderHints(QPainter的::抗锯齿)'? – 2015-02-09 19:17:09

+0

是的,我已经尝试过(glwidget和graphicsview中的画家),但没有抗锯齿(但如果添加到QMainwindow并设置样本= 4,仍然是glwidget,它运行良好) – lemta 2015-02-10 01:27:02

回答

3

追加超越码到您的main.cpp下的QApplication初始化

QSurfaceFormat fmt; 
fmt.setSamples(10); 
QSurfaceFormat::setDefaultFormat(fmt); 
+0

正如注意,这是必需的显示小部件或其父项之前:例如对于QOpenGLWidget,initializeGL在主app.exec()循环中被调用,所以已经太晚了。在我的情况下,我是在widget构造函数中完成的。 – 2016-02-25 11:36:59

+0

在每次绘制之前,可能需要明确调用'glEnable(GL_MULTISAMPLE);'。我没有那样做过实验问题。 – 2016-08-08 11:40:31