logplus/DataMgr/src/view.cpp

109 lines
3.4 KiB
C++
Raw Normal View History

2026-01-29 16:57:06 +08:00
#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.);//测试520
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();
}