[Qt-interest] Problem using OpenGL from Qt Application

Samuel Rødal sroedal at trolltech.com
Tue Oct 20 15:20:17 CEST 2009


Sujan Dasmahapatra wrote:
> Dear Friends
> 
> I am trying create an OpenGL graphics from within my QT application. I 
> am getting the openGL window but I am unable see any graphicsItem on 
> it.See below the code snippet
> 
> class GraphicsView : public QGLWidget
> {
>        Q_OBJECT
> public:
>         GraphicsView();
>        ~GraphicsView();
> protected:
>       void initializeGL();
>       void paintGL();
> private:
>  QColor trolltechGreen;
>         QColor trolltechPurple;
> 
>     GLuint   object;
>     GLuint  makeobject();
> void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
>               GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);
>         void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
> };
> 
> GraphicsView::GraphicsView()
> {
>    object = 0;
> trolltechGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
>     trolltechPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);
> 
> }
> GraphicsView::~GraphicsView()
> {
> }
> 
> void GraphicsView::initialize()
> {
>   qglClearColor(trolltechPurple.dark());
>     object = makeObject();
>     glShadeModel(GL_FLAT);
>     glEnable(GL_DEPTH_TEST);
>     glEnable(GL_CULL_FACE);
> 
> 
> }
> 
> void GraphicsView::paintGL()
> {
> glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
>     glLoadIdentity();
>     glTranslated(0.0, 0.0, -10.0);
>     glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
>     glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
>     glRotated(zRot / 16.0, 0.0, 0.0, 1.0);
>     glCallList(object);
> 
> }
> 
> GLuint GraphicsView::makeobject()
> {
>        GLuint list = glGenLists(1);
>     glNewList(list, GL_COMPILE);
>    
>     glBegin(GL_QUADS);
> 
>     GLdouble x1 = +0.06;
>     GLdouble y1 = -0.14;
>     GLdouble x2 = +0.14;
>     GLdouble y2 = -0.06;
>     GLdouble x3 = +0.08;
>     GLdouble y3 = +0.00;
>     GLdouble x4 = +0.30;
>     GLdouble y4 = +0.22;
>    
>     quad(x1, y1, x2, y2, y2, x2, y1, x1);
>     quad(x3, y3, x4, y4, y4, x4, y3, x3);
>    
>     extrude(x1, y1, x2, y2);
>     extrude(x2, y2, y2, x2);
>     extrude(y2, x2, y1, x1);
>     extrude(y1, x1, x1, y1);
>     extrude(x3, y3, x4, y4);
>     extrude(x4, y4, y4, x4);
>     extrude(y4, x4, y3, x3);
>    
>     const double Pi = 3.14159265358979323846;
>     const int NumSectors = 200;
>    
>     for (int i = 0; i < NumSectors; ++i) {
>         double angle1 = (i * 2 * Pi) / NumSectors;
>         GLdouble x5 = 0.30 * sin(angle1);
>         GLdouble y5 = 0.30 * cos(angle1);
>         GLdouble x6 = 0.20 * sin(angle1);
>         GLdouble y6 = 0.20 * cos(angle1);
> 
>         double angle2 = ((i + 1) * 2 * Pi) / NumSectors;
>         GLdouble x7 = 0.20 * sin(angle2);
>         GLdouble y7 = 0.20 * cos(angle2);
>         GLdouble x8 = 0.30 * sin(angle2);
>         GLdouble y8 = 0.30 * cos(angle2);
> 
>         quad(x5, y5, x6, y6, x7, y7, x8, y8);
> 
>         extrude(x6, y6, x7, y7);
>         extrude(x8, y8, x5, y5);
>     }
> 
>     glEnd();
> 
>     glEndList();
>     return list;
> 
> 
> }
> 
> void GraphicsView::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
>                     GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)
> {  
>     qglColor(trolltechGreen);
>    
>     glVertex3d(x1, y1, -0.05);
>     glVertex3d(x2, y2, -0.05);
>     glVertex3d(x3, y3, -0.05);
>     glVertex3d(x4, y4, -0.05);
> 
>     glVertex3d(x4, y4, +0.05);
>     glVertex3d(x3, y3, +0.05);
>     glVertex3d(x2, y2, +0.05);
>     glVertex3d(x1, y1, +0.05);
> }
> 
> void GraphicsView::extrude(GLdouble x1, GLdouble y1, GLdouble x2, 
> GLdouble y2)
> {  
>     qglColor(trolltechGreen.dark(250 + int(100 * x1)));
>    
>     glVertex3d(x1, y1, +0.05);
>     glVertex3d(x2, y2, +0.05);
>     glVertex3d(x2, y2, -0.05);
>     glVertex3d(x1, y1, -0.05);
> }
> 
> /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
> // Now I am creating the instance of this openGL window in the 
> mainwindow which is further called in  the main.
> // My OpenGL black color background window is coming but there's no item 
> that I am creating using makeobject()
> MainWindow::startMesh()
> {
>     GraphicsView   *view = new GraphicsView(this);
>     view->show();
> }

Looks like void GraphicsView::initialize() should be 
GraphicsView::initializeGL(). Does it even compile?

--
Samuel



More information about the Qt-interest-old mailing list