8 GaugeArc::GaugeArc(QGraphicsItem *parent) :
12 int xo=size().width()/2;
13 int yo=size().height()/2;
15 #define DR 3.141592653/180.0
17 for (i = 0; i < 5; i++) {
18 fixo+=QLine(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR),xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
20 scale.moveTo(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR));
21 scale.lineTo(xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
23 fixo+=QLine(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR),xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
29 void GaugeArc::paintArcScale(QPainter *painter,int width,int height)
35 painter->setTransform(QTransform().translate(scenePos().x()+width/2,scenePos().y()+height/2).scale(m_scale,m_scale));
36 QTransform savematrix= painter->transform ();
38 pen.setWidth(m_lineWidth);
40 QPen nopen(Qt::NoPen);
41 QBrush cbrush(m_color);
42 QBrush nbrush(Qt::NoBrush);
43 QBrush backBrush(m_backColor);
44 // QBrush cbrush(m_color);
45 painter->setBrush(cbrush);
48 painter->setFont(m_font);
49 QFontMetrics fm(m_font);
52 //painter->setTransform(QTransform().translate(xo+scenePos().x()/m_scale, yo+scenePos().y()/m_scale),true);
53 painter->setBrush(backBrush);
54 painter->setPen(nopen);
55 painter->drawChord(QRect(-xo,-xo,2*xo,2*xo),0,360*16);
56 painter->setBrush(cbrush);
58 while(alpha<=(m_highPosition<m_lowPosition?m_highPosition+360:m_highPosition)) {
62 label=QString("%1").arg(val);
63 int labelWidth=fm.width(label);
64 int labelHeight=fm.height();
65 painter->setTransform(savematrix);
66 painter->drawArc(-arcsize,-arcsize,2*arcsize,2*arcsize,(int(m_lowPosition+270)%360)*-16,(int(m_highPosition+270)%360)*-16);
67 QPoint labelP=QPoint(0,-xo+15);
68 labelP=rotT.map(labelP);
69 QPoint lineInP=QPoint(0,-xo+2);
70 lineInP=rotT.map(lineInP);
71 QPoint lineOutP=QPoint(0,-xo+12);
72 lineOutP=rotT.map(lineOutP);
73 QPoint labelPo=QPoint(labelWidth*((-1-sin(3.1415926/180*alpha))/2),labelHeight*((1+cos(3.1415926/180*alpha))/2));
74 QPoint labelPd=labelP+labelPo;
75 // qDebug() << alpha << labelP << labelPd << labelPo << labelWidth << labelHeight;
76 painter->drawText(labelPd,label);
77 painter->drawLine(lineInP,lineOutP);
78 alpha+=m_tickSpacing?m_tickSpacing:10;
82 needle+=QPoint(0,-xo);
85 painter->setTransform(QTransform().rotate(m_lowPosition+(m_value*1.0*m_tickSpacing/m_tickIncrement)),true);
86 painter->drawPolygon(needle);
89 void GaugeArc::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,
92 paintArcScale(painter,size().width(),size().height());
93 // paintNeedle(painter,val,size().width(),size().height());