void mySpeedWatch::drawIndicator(QPainter *painter) { painter->save(); QPolygon pts; pts.setPoints(3, -2,0, 2,0, 0,60); /* (-2,0)/(2,0)/(0,60) */ painter->rotate(m_startAngle); double degRotate = (360.0 - m_startAngle - m_endAngle)/(m_maxValue - m_minValue)*(m_value - m_minValue); //画指针 painter->rotate(degRotate); QRadialGradient haloGradient(0, 0, 60, 0, 0); haloGradient.setColorAt(0, QColor(60,60,60)); haloGradient.setColorAt(1, QColor(160,160,160)); painter->setPen(Qt::white); painter->setBrush(haloGradient); painter->drawConvexPolygon(pts); painter->restore(); //画中心点 QColor niceBlue(150, 150, 200); QConicalGradient coneGradient(0, 0, -90.0); coneGradient.setColorAt(0.0, Qt::darkGray); coneGradient.setColorAt(0.2, niceBlue); coneGradient.setColorAt(0.5, Qt::white); coneGradient.setColorAt(1.0, Qt::darkGray); painter->setPen(Qt::NoPen); painter->setBrush(coneGradient); painter->drawEllipse(-5, -5, 10, 10); }
void QMeter::drawNeedle(QPainter *painter) { // hat shadow // painter->setPen(Qt::NoPen); // painter->setBrush(QColor(120,120,120,10)); // painter->drawEllipse(-5, -6, 14, 14); // end hat shadow painter->save(); painter->rotate(-90.0); QPolygon pts; pts.setPoints( 3, -2,0, 2,0, 0,30 ); QPolygon shadow; shadow.setPoints(3, -1,0, 1,0, 0,29); int degRotate=0; degRotate = (int)( m_startAngle+(m_endAngle-m_startAngle)/(m_maxValue-m_minValue)*(m_value-m_minValue) ); painter->rotate( -degRotate ); QRadialGradient haloGradient(0, 0, 20, 0, 0); haloGradient.setColorAt(0.0, QColor(255,120,120)); haloGradient.setColorAt(1.0, QColor(200,20,20)); QColor color=QColor(Qt::darkRed); color.setAlpha(90); painter->setPen(color); painter->setBrush(haloGradient); painter->drawConvexPolygon( pts ); painter->setBrush(QColor(255,120,120)); painter->drawConvexPolygon( shadow ); painter->restore(); // draw needle hat QLinearGradient linearGrad(QPointF(-7, -7), QPointF(14, 14)); linearGrad.setColorAt(0, Qt::white); linearGrad.setColorAt(1, Qt::black); painter->setPen(Qt::NoPen); painter->setBrush(linearGrad); painter->drawEllipse(-7, -7, 14, 14); }