2016-04-12 19 views
4

最近、QGLWidgetから新しいQOpenGlWidgetに切り替えました。これは、後でrenderText()関数がないためです。私はQPainterを使用して、私のOpenGL 3Dグラフィック上にテキストを描くことを考えています。QOpenGlWidgetのpaintGLでQPainterを使用する方法

私はpaintGL()関数を通してすべてをレンダリングしましたが、その関数でQPainterを安全に追加するにはどうすればよいですか?

paintGL() 
{ 
    //Raw OpenGL codes 
    //.... 

    //Where to safely use the QPainter? 
} 

答えて

2

ちょうどpaintGL()方法にQPainter呼び出しを追加:

私のコードは次のようです。

paintGL() 
{ 
    // OpenGL code... 

    QPainter p(this); 
    p.drawText(...); 

} 

paintGL()機能はQOpenGLWidget::paintEvent()によって呼び出されるのでQPainterを使用しても問題があってはなりません。

リトル例:

class CMyTestOpenGLWidget : public QOpenGLWidget 
{ 
public: 
    CMyTestOpenGLWidget(QWidget* parent) : QOpenGLWidget(parent) {} 

    void initializeGL() override 
    { 
     glClearColor(0, 0, 0, 1); 
     glEnable(GL_DEPTH_TEST); 
     glEnable(GL_LIGHT0); 
     glEnable(GL_LIGHTING); 
     glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); 
     glEnable(GL_COLOR_MATERIAL); 
    } 

    void paintGL() override 
    { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     glBegin(GL_TRIANGLES); 
     glColor3f(1.0, 0.0, 0.0); 
     glVertex3f(-0.5, -0.5, 0); 
     glColor3f(0.0, 1.0, 0.0); 
     glVertex3f(0.5, -0.5, 0); 
     glColor3f(0.0, 0.0, 1.0); 
     glVertex3f(0.0, 0.5, 0); 
     glEnd(); 

     QPainter p(this); 
     p.setPen(Qt::red); 
     p.drawLine(rect().topLeft(), rect().bottomRight()); 
    } 

    void resizeGL(int w, int h) override 
    { 
     glViewport(0, 0, w, h); 
    } 
}; 

enter image description here

+0

私はこれを試してみましたが、その後のすべての私の生のOpenGLの絵は、私はQtの5.4.1を使用しています...行ってきました、これはバージョンの問題です? – Nyaruko

+0

私はちょうどQt 5.4でそれを試して、それは動作します... – Tomas

+0

あなたのコードを添付できますか? – Nyaruko

関連する問題