Hello,
J'ai créer un nouvelle classe ColorPickerView qui hérite de QGraphicsView dans le but de re définir la méthode de dessin du fond, et de spécialiser le comportement.
Cependant, depuis que j'ai fais ceci, j'ai l'impression que le comportement de QGraphicsView est quelque peu dégradé.
En effet j'ai beau spécifier la couleur de fond via setBackgroundBrush, cet appel n'à plus d'effet...
J'avais dans l'idée de devoir appeler le ctor parent, mais le compileur me le refuse...
Aussi, j'ai re définis la méthode drawBackground.
Ceci afin de dessiner deux dégradés.
Pour cela j'ai ajouté de QGraphicsRectItem via QGraphicScene->addRect.
Cependant, pour des question de performances constatés, je dois faire un appel à clear scene, puis re créer les deux dégradés de ma scène à chque appel de drawbackgound.
Est la bonne méthode ?
J'avais dans plutôt l'idée d'instancier deux QGraphicsRectItem, et de redessiner leurs zones. Mais, 1/ QGraphicScene ne me permet pas de créer des QGraphicsRectItem, secondo lorsque je fais cela l'appli rame à mort....
Voici le code :
Code colorpickerview.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #ifndef COLORPICKERVIEW_H #define COLORPICKERVIEW_H #include <QGraphicsView> class ColorPickerView : public QGraphicsView { Q_OBJECT public: explicit ColorPickerView(QWidget *parent = 0); protected: void ColorPickerView::drawBackground( QPainter * painter, const QRectF & rect ); double ColorPickerView::diag( ); signals: public slots: }; #endif // COLORPICKERVIEW_H
Code colorpickerview.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include "colorpickerview.h" #include "math.h" ColorPickerView::ColorPickerView(QWidget *parent) : QGraphicsView(parent) { this->setScene(new QGraphicsScene()); this->setRenderHint(QPainter::Antialiasing, true); } void ColorPickerView::drawBackground( QPainter * painter, const QRectF & rect ) { this->scene()->clear(); QRadialGradient degrade( this->contentsRect().left(), this->contentsRect().top(), this->diag() ); degrade.setColorAt(0, Qt::white); degrade.setColorAt(1, Qt::transparent); this->scene()->addRect(this->contentsRect(),Qt::NoPen,QBrush(degrade)); QLinearGradient linearGrad(0,this->contentsRect().height(),0,0); linearGrad.setColorAt(0, Qt::black); linearGrad.setColorAt(1, Qt::transparent); this->scene()->addRect(this->contentsRect(),Qt::NoPen,QBrush(linearGrad)); } double ColorPickerView::diag( ) { return sqrt( pow(this->contentsRect().width(),2) + pow(this->contentsRect().height(),2)); }
Encore merci par avance !
a plus
Partager