#include "DrawWaveView.h" #include #include #include #include DrawWaveView::DrawWaveView(QWidget *parent) : QWidget(parent),isInit(false) { m_values=NULL; setYGrid(m_yGrid); } void DrawWaveView::paintEvent(QPaintEvent *evt) { if(m_count > 0) { QPainter paint; paint.begin(this); paint.setBrush(Qt::white); paint.drawRect(rect()); paint.save(); QPen pen(Qt::red);//lightGray); pen.setStyle(Qt::SolidLine); pen.setWidth(2); paint.setPen(pen); //int y1=rect().bottom(),y2=rect().top(); //paint.drawLine(rect().left()+5,rect().top()+5,rect().right()-5,rect().top()+5); drawCoord(&paint); drawHorlines(&paint); drawVerLines(&paint); // pen.setWidth(2); pen.setColor(Qt::darkGray); paint.setPen(pen); drawDataPoints(&paint); paint.restore(); paint.end(); } } void DrawWaveView::initView() { int width=this->width(); int height=this->height(); m_width=width-D_VIEW_MARGIN_LEFT-D_VIEW_MARGIN_RIGHT; m_height=height-D_VIEW_MARGIN_BOTTOM-D_VIEW_MARGIN_TOP; if(0 >= width || 0 >= height ) { isInit=false; }else { isInit=true; } } void DrawWaveView::drawCoord(QPainter *painter) { if(!isInit ) { return; } m_vGridHeight=m_height/(float)m_yGrid; m_hGridWidth=m_width/(float)m_xGrid; float rangeX= m_Xmax-m_Xmin; float rangeY=m_Ymax-m_Ymin; m_xGridValue=rangeX/m_xGrid; m_yGridValue=rangeY/m_yGrid; // m_pixXValue=m_hGridWidth/m_xGridValue*(rangeX/(m_count-0)); // m_pixYValue=m_vGridHeight/m_yGridValue; } void DrawWaveView::drawHorlines(QPainter *painter) { QVector lsLines; float offsetY=D_VIEW_MARGIN_TOP; int fontWidth=0; int fontHeight=0; float offsetYValue=m_Ymin; QString horText; QFontMetrics metrics(this->font()); QPoint point; painter->setPen(Qt::black); for(int i=0;i<=m_yGrid;i++) { lsLines< 0 ) { point.setX(D_VIEW_MARGIN_LEFT-fontWidth*1.1); point.setY(m_height+offsetY+fontHeight/2.); painter->drawText(point,horText); } offsetY-=m_vGridHeight; offsetYValue+=m_yGridValue; } painter->setPen(Qt::lightGray); painter->drawLines(lsLines); } void DrawWaveView::drawVerLines(QPainter *painter) { QVector lsLines; float offsetX=0; QString verText; int fontHeight=0; int fontWidth=0; float offsetXValue=m_Xmin; QFontMetrics metrics(this->font()); QPoint point; painter->setPen(Qt::black); for(int i=0;i<=m_xGrid;i++) { offsetX=i*m_hGridWidth;//m_xGridValue*m_width/(m_count-0); offsetXValue=m_Xmin+i*m_xGridValue; //if(offsetX>m_width)offsetX=m_width; lsLines<0 ) { point.setX(D_VIEW_MARGIN_LEFT+offsetX-fontWidth/2.); point.setY(D_VIEW_MARGIN_TOP+fontHeight*1.1+m_height); painter->drawText(point,verText); } //offsetX+=m_hGridWidth; //offsetXValue+=m_xGridValue; } painter->setPen(Qt::lightGray); painter->drawLines(lsLines); } QPointF DrawWaveView::coordWavePoint(int ix,float value) { float x=D_VIEW_MARGIN_LEFT+ix*m_width/(m_count-0);//m_pixXValue*ix; //x=i*width/(points-1) float y=D_VIEW_MARGIN_TOP+m_height*((m_Ymax-value)/(m_Ymax-m_Ymin));//m_pixYValue*(value-m_Ymin); return QPoint(x,y); } void DrawWaveView::setValues(float *values) { if(NULL != m_values) { m_values=NULL; } m_values=values; } void DrawWaveView::setCount(int count) { m_count=count; } void DrawWaveView::setTime(int time) { m_time=time; } void DrawWaveView::setXGrid(int xGrid)//X轴网格数 { m_xGrid=xGrid; } void DrawWaveView::setYGrid(int yGrid)//Y轴网格数 { m_yGrid=yGrid; } void DrawWaveView::drawDataPoints(QPainter *painter) { float value=0; QPolygonF polygon; QPointF *points=new QPointF[m_count]; for(int i=0;idrawText(points[i],QString::number(value)); polygon<setPen(Qt::darkBlue); painter->drawPolyline(points,m_count); painter->setBrush(Qt::red); painter->drawEllipse(points[m_time],5,5); //painter->drawText(points[m_time],"*");//QString::number(m_values[m_time])); //painter->drawPolygon(polygon); }