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 qDebug() << "paintArcScale" << m_lowPosition << m_highPosition;
59 while(alpha<=(m_highPosition<m_lowPosition?m_highPosition+360:m_highPosition)) {
63 label=QString("%1").arg(val);
64 int labelWidth=fm.width(label);
65 int labelHeight=fm.height();
66 painter->setTransform(savematrix);
67 painter->drawArc(-arcsize,-arcsize,2*arcsize,2*arcsize,(int(m_lowPosition+270)%360)*-16,(int(m_highPosition+270)%360)*-16);
68 QPoint labelP=QPoint(0,-xo+15);
69 labelP=rotT.map(labelP);
70 QPoint lineInP=QPoint(0,-xo+2);
71 lineInP=rotT.map(lineInP);
72 QPoint lineOutP=QPoint(0,-xo+12);
73 lineOutP=rotT.map(lineOutP);
74 QPoint labelPo=QPoint(labelWidth*((-1-sin(3.1415926/180*alpha))/2),labelHeight*((1+cos(3.1415926/180*alpha))/2));
75 QPoint labelPd=labelP+labelPo;
76 // qDebug() << alpha << labelP << labelPd << labelPo << labelWidth << labelHeight;
77 painter->drawText(labelPd,label);
78 painter->drawLine(lineInP,lineOutP);
79 alpha+=m_tickSpacing?m_tickSpacing:10;
83 needle+=QPoint(0,-xo);
86 painter->setTransform(QTransform().rotate(m_lowPosition+(m_value*1.0*m_tickSpacing/m_tickIncrement)),true);
87 painter->drawPolygon(needle);
90 void GaugeArc::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,
93 paintArcScale(painter,size().width(),size().height());
94 // paintNeedle(painter,val,size().width(),size().height());