tags:

views:

206

answers:

1

When you addRect ... then addLine ... to a QGraphicsScene, you'd expect the lines to be drawn over the rects, right ? In Qt 4.4.3, mac ppc 10.4.11, some lines are not, in the testcase below. I imagine this is a Qt / mac lib / graphics card interaction (versionitis disease) so would appreciate anyone who can say "it's clean in ...".
Thanks, cheers

// QGraphicsScene mac rendering bug: some addLines are hidden by previous addRects
    // C: 150 line is hidden under most rects, others ok
    // pyqt: other lines are hidden
// qt-mac-opensource-src-4.4.3 PyQt-mac-gpl-4.4.4 macosx 10.4.11, ppc, GEForce2 mx
// [email protected] 9jun

#include <cmath>
#include <QtGui>

int main( int argc, char* argv[] )
{
    qDebug() << "qVersion:" << qVersion();
    QApplication app( argc, argv );
    int Size = 10;  // changes what's hidden
    int x0 = -500, y0 = -500, x1 = 500, y1 = 500;
    QRectF scenerect( x0, y0, x1, y1 );
    QGraphicsScene* scene = new QGraphicsScene( scenerect );
    QGraphicsView* view = new QGraphicsView( scene );
    view->centerOn( 100, 100 );  // ?

    for( int j = x0/2;  j < x1/2;  j += Size ){
    for( int k = y0/2;  k < y1/2;  k += Size ){
        scene->addRect( j, k, Size-1, Size-1, Qt::NoPen, QBrush( "palegreen" ));
    }
    }
    for( int angle = 0;  angle < 180;  angle += 30 ){
        float c = cos( angle * M_PI / 180 ) * x1;
        float s = sin( angle * M_PI / 180 ) * y1;
        scene->addLine( -c, -s, c, s, QPen( "black" ));
    }

    view->show();
    return app.exec();
}
A: 

From: David Boddie trolltech.com>
Subject: Re: Re: QGraphicsScene addLine, addRect draw order scrambled in Qt 4.4.3 on mac ?
Newsgroups: gmane.comp.python.pyqt-pykde
Date: 2009-06-09 14:41:06 GMT

On Tue Jun 9 10:41:37 BST 2009, denis wrote:

bug: some addLines are hidden by previous addRects in Qt 4.4.3 + mac too, differently in C and PyQt

I don't think the order in which the objects are drawn is guaranteed to be the same as the order in which they are created.

This is unfortunate because it means that the drawing order is arbitrary. I tend to set the Z value of objects to be sure that they are drawn in the order I expect.

David

Denis