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 35
| class Ruler : public QGraphicsItemGroup {
public:
Ruler( QGraphicsItem * parent,
int graduationCount, // le nombre de graduations à afficher
int dubbleEvery, // une "double" graduation toutes les
int quadraEvery): // une "quadruple" graduation toutes les (généralement,
// au moins au début et à la fin et multiple de dubbleEvery)
QGraphicsItemGroup (parent), count_(graduationCount), dubble_(dubbleEvery),quadra_(quadraEvery){
QRectF * bounding=boundingRect(); // le rectangle dont on dispose
QReal height=bounding->height(); // la hauteur totale
QReal quart= height/4; // le "demi" hauteur
QReal alfQuart= quart/ 2; // le "quart" hauteur
QReal width = bounding->width(); // la largeur totale
QReal distance= width/ count_; // la distance qui sépare deux graduations
addToGroup(new QGraphicsLineItem(0,half,width, half)); //on rajoute une ligne horizontale au mileu du rectangle
addToGroup(new QGraphicsLineItem(0,0,0,height) );// on rajoute une verticale au début du rectangle
addToGroup(new QGraphicsLineItem(width,0,width,height) );// et une autre à la fin
for(int i=1;i<count_;++i){
QReal realDistance= distance* i;
if(i% dubble_ == 0 &&
i%quadra!=0){// quand il faut une "double" hauteur
addToGroup(new QGraphicsLineItem(realDistance,quart, realDistance, height-quart);
}else if (i%quadra==0){quand il faut une "quadruple" hauteur
addToGroup(new QGraphicsLineItem(realDistance,0, realDistance, height);
}else{ // et quand il faut une hauteur "simple"
addToGroup(new QGraphicsLineItem(realDistance,quart+halfQuart, realDistance, height-(quart+halfQuart));
}
}
}
private:
int count_;
int dubble_;
int quadra_;
}; |
Partager