/* * phaseGraphic.cpp * * Created on: Jun 29, 2013 * Author: yiyu * QQ:1036184468 * Descriptoin: */ #include "PhaseGraphic.h" #include "QPalette" #include PhaseGraphic::PhaseGraphic(QWidget *parent) : QWidget(parent){ if (sysPara == nullptr) { sysPara = SysPara::ins(); } pen.setStyle(Qt::SolidLine); pen.setWidth(2); pen.setBrush(Qt::red); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::RoundJoin); brush.setStyle(Qt::SolidPattern); setPalette(QPalette(Qt::white)); setAutoFillBackground(true); setMinimumSize(626,150); lockPhaseFlag = false; lockedPhase = 0; phaseCount = 32; } PhaseGraphic::~PhaseGraphic(){ } void PhaseGraphic::paintEvent(QPaintEvent *){ if(sysPara){ QString num; QRect rec = rect(); int w = rec.width() - 30; int h = rec.height(); int step = w/phaseCount; int high = h/3; int low = 2*h/3; int x_shift = 10; int current_x = x_shift; int phaseStep = sysPara->para.divideRatio*2/phaseCount; int currentPhase = 0; int phasePos = sysPara->para.divideRatio?w*sysPara->status.phase/(sysPara->para.divideRatio*2):0; int phasePosEdgePos = sysPara->status.phasePosEdge*w/phaseCount; int phaseNegEdgePos = sysPara->status.phaseNegEdge*w/phaseCount; int lockPhasePos = sysPara->para.divideRatio?w*lockedPhase/(sysPara->para.divideRatio*2):0; unsigned int maxPhaseDetectHighVoltageTm = 0; for(int i = 0;i < phaseCount; i++){ if(sysPara->status.phaseDetectHighTm[i] > maxPhaseDetectHighVoltageTm) maxPhaseDetectHighVoltageTm = sysPara->status.phaseDetectHighTm[i]; } QPainter p(this); pen.setBrush(Qt::red); p.setPen(pen); p.setBrush(brush); for(int i = 0; i < 8;i++){ for(int j = 0;j < 8; j++){ if(sysPara->status.phaseChargeResult[i] & (1<status.phaseDetectHighTm[i*8+j]*h/(3*maxPhaseDetectHighVoltageTm):0; int nextPhaseDetectHighPos = maxPhaseDetectHighVoltageTm?sysPara->status.phaseDetectHighTm[(i*8 + j + 1)%phaseCount]*h/(3*maxPhaseDetectHighVoltageTm):0; p.drawLine ( current_x, low - currPhaseDetectHighPos, current_x + step, low - nextPhaseDetectHighPos); current_x = (8*i + j + 1)*w/phaseCount + x_shift; currentPhase += phaseStep; } } p.drawLine(current_x,low - 5,current_x,low + 5); num = QString::number(currentPhase); p.drawText(current_x - num.size()*4,low + 20,num); //做后的标尺 num = QString::number(maxPhaseDetectHighVoltageTm); p.drawText(x_shift + 10,high - 10,num); //给坐标画标尺 p.drawLine(phasePos + x_shift,low + 10,phasePos + x_shift,high - 10); //将相位尺标记一下 pen.setBrush(Qt::blue);p.setPen(pen); p.drawLine(phasePosEdgePos + x_shift - 3,low + 10,phasePosEdgePos + x_shift + 3,low - 30); p.drawLine(phaseNegEdgePos + x_shift + 3,low + 10,phaseNegEdgePos + x_shift - 3,low - 30); if(lockPhaseFlag){ pen.setBrush(Qt::green);p.setPen(pen); p.drawLine(lockPhasePos + x_shift,low + 5,lockPhasePos + x_shift,high - 5); } } } void PhaseGraphic::updateSysStatusToUI(){ update(); } void PhaseGraphic::setLockedPhase(bool enable,int val){ lockPhaseFlag = enable; lockedPhase = val; } void PhaseGraphic::setPhaseCount(int count) { switch(count) { case 64: phaseCount = 64; break; case 32: phaseCount = 32; break; case 16: phaseCount = 16; break; default: phaseCount = 64; break; } }