109 lines
3.4 KiB
C++
109 lines
3.4 KiB
C++
#include "view.h"
|
||
#include <QPainter>
|
||
|
||
MyView::MyView(QWidget *parent) : QWidget(parent)
|
||
{
|
||
|
||
}
|
||
|
||
|
||
void MyView::paintEvent(QPaintEvent *event)
|
||
{
|
||
|
||
/* QPainter paint;
|
||
paint.begin(this);
|
||
paint.setBrush(Qt::white);
|
||
paint.drawRect(plotrec);
|
||
QString str=m_CurveName+"曲线数值分布图";
|
||
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
|
||
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
|
||
paint.end();*/
|
||
QPainter paint;
|
||
paint.begin(this);
|
||
// paint.setBrush(Qt::lightGray);
|
||
//paint.drawRect(plotrec);
|
||
QRect plotrec=widgetRec;
|
||
QRect rec1=widgetRec;
|
||
QString str=m_CurveName+"曲线数值分布图";
|
||
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
|
||
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
|
||
|
||
QRect rthy=plotrec;
|
||
rthy.adjust(70,40,-60,-60);
|
||
int x0=rthy.left(),y0=rthy.bottom(),h=rthy.height(),w=rthy.width();
|
||
int ptotal=point[0],pmax=point[0];
|
||
for(int i=1;i<10*m_SmallGrid;i++)
|
||
{
|
||
ptotal+=point[i];
|
||
if(pmax<point[i])pmax=point[i];
|
||
}
|
||
float hmax=100.*(float)pmax/(float)ShowPoint;
|
||
plotrec.setTop(rthy.bottom()+16);
|
||
for(int i=0;i<=10;i++)
|
||
{
|
||
//横线
|
||
paint.drawLine(x0,y0-i*h/10,x0+w,y0-i*h/10);
|
||
str=QString::number(i*m_Ymax/10.,'f',1);
|
||
if((m_Ymax/10.)==int(m_Ymax/10))str=QString::number(i*m_Ymax/10.);//测试5,20
|
||
paint.drawText(x0-25,y0-i*h/10+10,str);
|
||
//纵线
|
||
paint.drawLine(x0+i*w/10,y0-h,x0+i*w/10,y0);
|
||
if(i%2==0)
|
||
{
|
||
plotrec.setLeft(x0+(i-1)*w/10);
|
||
plotrec.setRight(x0+(i+1)*w/10);
|
||
str=QString::number(m_Xmin+i*(m_Xmax-m_Xmin)/10.);
|
||
paint.drawText(plotrec, Qt::AlignHCenter| Qt::AlignTop,str);
|
||
}
|
||
}
|
||
//写x、y轴坐标名
|
||
rec1.adjust(0,40,rec1.left()+40-rec1.right(),0);
|
||
//rec1.top+=40;
|
||
//rec1.right=rec1.left+40;
|
||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"pp");//"频");
|
||
rec1.adjust(0,20,0,0);//rec1.top+=20;
|
||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"LL");//"率");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
|
||
rec1.adjust(0,20,0,0);//rec1.top+=20;
|
||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"(%)");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
|
||
plotrec.setLeft(x0);plotrec.setBottom(plotrec.bottom()-10);
|
||
paint.drawText(plotrec,Qt::AlignHCenter| Qt::AlignBottom,m_CurveName+m_CurveUnit);//dc.DrawText(,plotrec,DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
|
||
//CBrush *oldBrush=dc.SelectObject(&GreenBrush);
|
||
|
||
|
||
for(int i=0;i<10*m_SmallGrid;i++)
|
||
{
|
||
plotrec.setLeft(x0+i*w/(10*m_SmallGrid));//plotrec.left=x0+i*w/(10*m_SmallGrid);//注意:i*w/(10*m_SmallGrid)和w/(10*m_SmallGrid)*i误差挺大
|
||
plotrec.setRight(x0+(i+1)*w/(10*m_SmallGrid));
|
||
plotrec.setBottom(y0);
|
||
float y=(float)point[i]/(float)pmax;//y=(float)point[i]/(float)pmax;
|
||
plotrec.setTop(y0-y*h*hmax/m_Ymax);
|
||
float left=m_Xmin+i*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
|
||
float right=m_Xmin+(i+1)*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
|
||
if(left>=m_Xmax2||right<=m_Xmin2)paint.setBrush(Qt::green);
|
||
//if(i<ibegin||i>iend)dc.FillRect(plotrec,&GreenBrush);
|
||
else paint.setBrush(Qt::red);
|
||
paint.drawRect(plotrec);
|
||
}
|
||
if(!m_DrawLjpl) {
|
||
paint.end();
|
||
return;
|
||
}
|
||
//画累计频率线
|
||
int pp=0;
|
||
QPen pen(Qt::red);
|
||
pen.setStyle(Qt::SolidLine);
|
||
pen.setWidth(2);
|
||
paint.setPen(pen);
|
||
float x1=x0,y1=y0;
|
||
for(int i=0;i<10*m_SmallGrid;i++)
|
||
{
|
||
pp+=point[i];
|
||
float x=x0+(float)((i+1.)*w/(10.*m_SmallGrid));
|
||
float y=(float)pp/(float)ShowPoint;//ptotal;
|
||
paint.drawLine(x1,y1,x,y0-y*h);
|
||
x1=x,y1=y0-y*h;
|
||
}
|
||
paint.end();
|
||
|
||
}
|