2010-03-08 6 views
3

Quelle est la différence dans le code suivant,Qt problème QBrush

QGraphicsScene * scence = new QGraphicsScene(); 

    QBrush *brush = new QBrush((QColor(60,20,20))); 
    scence->setBackgroundBrush(*brush); 

    QGraphicsView *view = new QGraphicsView(); 
    view->setScene(scence); 
    //view->setBackgroundBrush(*brush); 
    //view->setCacheMode(QGraphicsView::CacheBackground); 
    view->showFullScreen(); 

donne la couleur de fond noir

QGraphicsScene * scence = new QGraphicsScene(); 

    QBrush *brush = new QBrush(); 
    brush->setColor(QColor(60,20,20)); 
    scence->setBackgroundBrush(*brush); 

    QGraphicsView *view = new QGraphicsView(); 
    view->setScene(scence); 
    //view->setBackgroundBrush(*brush); 
    //view->setCacheMode(QGraphicsView::CacheBackground); 
    view->showFullScreen(); 

ne donne rien.

Répondre

7

Comme le doc Qt dit:

QBrush :: QBrush()
défaut __gVirt_NP_NN_NNPS<__ Constructs brosse noire avec le style Qt :: NoBrush (à savoir ce pinceau ne remplira pas les formes).

Dans votre deuxième exemple, vous devez définir le style de l'objet QBrush par setStyle(), par exemple avec Qt :: SolidPattern.

QGraphicsScene * scence = new QGraphicsScene(); 
    QBrush *brush = new QBrush(); 
    brush->setStyle(Qt::SolidPattern); // Fix your problem ! 
    brush->setColor(QColor(60,20,20)); 
    scence->setBackgroundBrush(*brush); 

    QGraphicsView *view = new QGraphicsView(); 
    view->setScene(scence); 
    //view->setBackgroundBrush(*brush); 
    //view->setCacheMode(QGraphicsView::CacheBackground); 
    view->showFullScreen(); 

Espérons que ça aide!

+0

Oui, merci ça a marché :) – Naruto

0

Une autre approche qui permet d'atteindre le même résultat est de mettre la couleur dans le constructeur de la brosse, et qui applique un style par défaut de solide:

QBrush *brush = new QBrush (QColor (60, 20, 20)); 

Les constructeurs qui prennent une couleur ont un paramètre facultatif pour la style, qui par défaut à Qt :: SolidPattern. Les deux approches produisent le même résultat, mais celui-ci utilise deux lignes de code en moins.