void EngineMeter::paintEvent(QPaintEvent *) { if(!m_visible) hide(); else if(isHidden()) show(); //info.info_log("r:%d\n",m_radius); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); setAxis(&painter); if(m_compoment & BackGround) drawBackground(&painter); if(m_compoment & Crown) drawCrown(&painter,m_radius); drawScale(&painter,m_radius); drawScaleNum(&painter,m_radius); drawNumericValue(&painter); if(m_compoment & DoubleMeter) { drawInnerScale(&painter,m_center,m_radius-m_strech); drawInnerScaleNum(&painter,m_center,m_radius-m_strech); } if(m_compoment & NumericValue) drawNumericValue(&painter); //draw units if((m_compoment & Units) || (m_compoment & NumericRate)) { if(!(m_compoment & NumericRate)) //rate is invisible { int haltw = int(1.7*m_radius); QRect r(-haltw,-m_radius/2-8,haltw<<1,16); drawContexts(&painter,QRect(r),m_units,16*m_scale,Qt::AlignCenter,QPen(Qt::darkMagenta)); } else { int haltw1 = int(1.7*m_radius); QRect r(-haltw1,-m_radius/2,haltw1<<1,16); //QRect r(-40,15,80,20); QString rate = QStringLiteral("¡Á") + QString("%1").arg(m_rate); if(m_compoment & Units) //units is visible rate += " "+m_units; drawContexts(&painter,QRect(r),rate,16*m_scale,Qt::AlignCenter,QPen(Qt::darkMagenta)); } } //draw title if(m_compoment & Title) { QRect rect(-width()/2,m_radius+2,width(),18); drawContexts(&painter,rect,m_title,18*m_scale,Qt::AlignCenter,QPen(Qt::yellow)); } drawRuntime(&painter); drawIndicator(&painter); }
void mySpeedWatch::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */ painter.translate(width() / 2, height() / 2); /* 坐标变换为窗体中心 */ int side = qMin(width(), height()); painter.scale(side / 200.0, side / 200.0); /* 比例缩放 */ painter.setPen(Qt::NoPen); drawCrown(&painter); /* 画边框 */ drawBackground(&painter); /* 画背景 */ drawScaleNum(&painter); /* 画刻度值 */ drawScale(&painter); /* 画刻度线 */ drawTitle(&painter); /* 画单位 */ if(m_numericIndicatorEnabled) drawNumericValue(&painter); /* 画数字显示 */ drawIndicator(&painter); /* 画指针 */ }