QGLWidget and QGraphicsScene Program Crash



  • I've been experimenting with rendering a QGLWidget within a QGraphicsScene. The program compiles just fine. However, when I attempt to render some text to the middle of the widget, the program will run for about a second and then it crashes. I've narrowed the problem down to the paintGL method (code below). However, I can't figure out why it's crashing.

    //Main
    @
    QGraphicsScene scene;
    scene.setSceneRect(0,0, 800, 600);
    scene.setItemIndexMethod(QGraphicsScene::NoIndex);
    scene.addWidget(new BackGroundGLWidget());

    QGraphicsView view(&scene);
    view.setMaximumSize(800, 600);
    view.setAlignment(Qt::AlignCenter);
    view.showMaximized();
    view.show();
    

    @

    PaintGL Code
    @
    // Clear screen and depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity(); // Reset view matrix
    glTranslatef(0.0f, 0.0f, -1.0f); // Move into screen 1 unit
    
    // Pulsing colors based on text position
    glColor3f(qMax(0.0, 1.0f * cos(cnt1)),
              qMax(0.0, 1.0 * sin(cnt2)),
              qMin(1.0, 1.0f - 0.5f * cos(cnt1 + cnt2)));
    
    // Print text on the screen
    QFont font;
    font.setBold(true);
    font.setPixelSize(18);
    
    // Print some text without taking the transformation into account
    // Very useful class to align some text in OpenGL at the absolute
    // borders of the screen!
    QFontMetrics metrics(font);
    QString bottomRightText("I am always at the bottom right.");
    renderText((width() - metrics.width(bottomRightText) - 10)/2,
               (height() - metrics.height() + 10)/2, bottomRightText, font);
    

    @



  • renderText is buggy at best (and about to be obsoleted). Try removing that call and see whether it crashes...



  • You can't put a QGLWidget inside a QGraphicsScene because it paints on screen.



  • So, how would I set a jpg image as overlay dialogs, buttons, lines and the like?

    Laurence -



  • Hm, you should do setViewport(new QGLWidget) on your graphics view. That enables you to do opengl stuff in your scene.



  • [quote author="cazador7907" date="1296309277"]
    So, how would I set a jpg image as overlay dialogs, buttons, lines and the like?

    Laurence -

    [/quote]

    I'm not getting it... do you have all of that in a QGraphicsScene or as ordinary widgets? Where and how is OpenGL involved in this?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.