2015-02-09 266 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